Recent Questions - Stack Apps most recent 30 from stackapps.com 2026-04-13T17:45:38Z https://stackapps.com/feeds https://creativecommons.org/licenses/by-sa/4.0/rdf https://stackapps.com/q/12029 0 ThreadCastAI – Community listening and reply management tool for Stack Exchange Himanshu Mehta https://stackapps.com/users/159112 2026-04-10T09:35:00Z 2026-04-13T09:20:59Z <h2>About</h2> <p>ThreadCastAI is a community monitoring and reply management tool that helps businesses and developers discover Stack Exchange questions relevant to their product, service, or area of expertise.</p> <p>It monitors Stack Exchange for threads matching user-defined keywords and tags, surfaces high-intent questions in a review queue, and lets users draft, edit, and approve replies — before anything is posted.</p> <p><strong>Live app:</strong> <a href="https://threadcast.pixalab.ai" rel="nofollow noreferrer">https://threadcast.pixalab.ai</a><br /> <strong>Contact:</strong> dev@pixelnx.com<br /> <strong>Developer:</strong> PixaLab (<a href="https://pixalab.ai" rel="nofollow noreferrer">https://pixalab.ai</a>)</p> <hr /> <h2>What it does</h2> <ul> <li>Monitors Stack Exchange for questions matching user-configured keywords</li> <li>Scores each thread by relevance and surfaces them in a review queue</li> <li>Lets users write or edit a reply inside the app</li> <li>Posts the reply only after the user explicitly approves it</li> <li>Tracks clicks and engagement per reply using UTM parameters</li> </ul> <p>Nothing is posted automatically. Every reply goes through a human review and approval step before submission.</p> <hr /> <h2>How it uses the Stack Exchange API</h2> <ul> <li><strong>Search</strong> — uses <code>/search/advanced</code> and <code>/questions</code> to find relevant threads based on user-defined keywords and tags</li> <li><strong>OAuth 2.0 (explicit flow)</strong> — users authenticate their own Stack Exchange account; the app only acts using a user-granted access token</li> <li><strong>Posting</strong> — replies are submitted via <code>/answers/add</code> using the authenticated user's personal token, only after the user approves the reply in the queue</li> <li><strong>Rate limiting</strong> — all requests use the registered API key; <code>backoff</code> values in API responses are fully respected; quota is never intentionally exhausted</li> <li><strong>No scraping</strong> — only official Stack Exchange API endpoints are used</li> </ul> <hr /> <h2>Authentication Flow</h2> <ol> <li>User clicks &quot;Connect Stack Exchange&quot; inside the app</li> <li>App redirects to Stack Exchange OAuth 2.0 explicit grant flow</li> <li>User reviews and approves permissions on Stack Exchange</li> <li>App receives the access token, stores it encrypted, scoped to that user only</li> <li>All subsequent API calls for that user use their personal token</li> </ol> <hr /> <h2>Platform Details</h2> <ul> <li><strong>Type:</strong> Web application (SaaS)</li> <li><strong>Client ID:</strong> 37941</li> <li><strong>OAuth redirect URI:</strong> <a href="https://threadcastapi.pixalab.ai/api/v1/auth/platforms/stackexchange/callback" rel="nofollow noreferrer">https://threadcastapi.pixalab.ai/api/v1/auth/platforms/stackexchange/callback</a></li> </ul> <hr /> <h2>License</h2> <p>Proprietary — all rights reserved.</p> https://stackapps.com/q/12027 0 What are the protocol constraints and hard rules for working with the AI from the API grldsndrs https://stackapps.com/users/156751 2026-04-09T22:38:08Z 2026-04-09T22:43:49Z <p>I am thinking that I can use the API with the newly minted AI to play an adversarial role with solutions I propose with ongoing projects. Before I implement anything can anyone illuminate the hidden or subtle rules of engagement?</p> https://stackapps.com/q/12021 0 Tracklister Community Bot - Electronic Music Q& Benjamin https://stackapps.com/users/158902 2026-04-05T17:29:24Z 2026-04-05T17:29:24Z <!-- thumbnail: https://tracklist.live/favicon.ico --> <!-- version: 1.0 --> <!-- tag: app --> <!-- excerpt: Monitors Music Fans SE for electronic music questions and posts data-driven answers using the Tracklister music database. --> <h2>About</h2> <p>Tracklister Community Bot monitors <a href="https://musicfans.stackexchange.com">Music Fans Stack Exchange</a> for questions about electronic music genres, artists, releases, and track identification. It posts answers enriched with data from the <a href="https://tracklist.live" rel="nofollow noreferrer">Tracklister</a> electronic music database.</p> <h3>How it works</h3> <ul> <li>Polls the SE API for new questions tagged <code>electronic-music</code>, <code>similar-artists</code>, <code>identify-this-song</code>, <code>identify-this-genre</code></li> <li>Drafts answers using release, artist, and genre data from the Tracklister database</li> <li>All answers are human-reviewed before posting</li> </ul> <h3>Links</h3> <ul> <li><strong>Website:</strong> <a href="https://tracklist.live" rel="nofollow noreferrer">https://tracklist.live</a></li> <li><strong>Platform:</strong> Server-side Ruby on Rails application</li> <li><strong>OAuth Scope:</strong> <code>write_access</code></li> <li><strong>Contact:</strong> via <a href="https://github.com/benjaminfauchald/Tracklister" rel="nofollow noreferrer">GitHub</a></li> </ul> https://stackapps.com/q/12017 0 PLACEHOLDER: Interaction between user on LLM and Online Knowledge Community arnold tsui https://stackapps.com/users/150553 2026-03-30T11:35:23Z 2026-04-03T15:49:44Z <p>About: This application is a research project exploring more effective ways to discover and interact with knowledge on Stack Overflow. It provides a unified interface for searching for content and allows authenticated users to perform actions such as upvoting or commenting directly via the API. This app is intended for research and non-commercial use.</p> <p>Features:</p> <p>OAuth 2.0 login using Stack Exchange View questions and answers from Stack Overflow Upvote answers and questions (requires user authorization) Post questions and answers which is written by user Google OAuth 2.0 support for app login (optional) How it works:</p> <p>User will chat with LLM as they do as usual, then the tool will suggest corresponding helpful posts and suggest possible action to the user It will not spam the community; every action will need the user to review and confirm. Posting an answer/question or reply is simulated, will not really post on the community.</p> https://stackapps.com/q/12016 -1 StackOverflow Agent Swarm — Automated answer bot Harshit Anand https://stackapps.com/users/158475 2026-03-29T21:48:58Z 2026-03-29T21:48:58Z <h2>StackOverflow Agent Swarm</h2> <p>A multi-agent automated system that discovers unanswered Stack Overflow<br /> questions and posts high-quality answers using Claude AI.</p> <p><strong>Type:</strong> Script / Bot<br /> <strong>Author:</strong> harshit-anand <strong>License:</strong> Personal use <strong>OAuth App ID:</strong> 37695</p> https://stackapps.com/q/12015 0 Professionalize Media AI – Support automation for Aspose / GroupDocs / Conholdate Professionalize_Media https://stackapps.com/users/158469 2026-03-29T20:15:28Z 2026-03-29T20:15:28Z <p>This is an application registered for Stack Exchange API usage.</p> <p>Professionalize Media AI is an internal support-assistance tool.</p> <p>It monitors Stack Overflow for public mentions of Aspose, GroupDocs, and Conholdate products, drafts technical responses, and allows approved publishing through authenticated workflows.</p> <p>Primary use:</p> <ul> <li>detect relevant developer questions</li> <li>draft helpful support replies</li> <li>publish approved answers/comments through the Stack Exchange API</li> </ul> <p>Status: internal / testing</p> <p>Contact: marko.pilekic@aspose.com</p> https://stackapps.com/q/12014 0 DeepDNA.ai — Stack Exchange Q&A assistant for genomics topics Alfonso Gutiérrez https://stackapps.com/users/158414 2026-03-28T19:49:38Z 2026-03-28T20:07:57Z <!-- thumbnail: https://deepdna.ai/og/home.png --> <!-- version: 1.0 --> <!-- tag: app --> <!-- excerpt: Genomics Q&A assistant for Biology, Bioinformatics and Health Stack Exchange --> <h2>About</h2> <p>DeepDNA.ai is a personal tool that finds unanswered questions about genomics, pharmacogenomics, and DNA analysis on Stack Exchange and helps draft answers.</p> <h2>Platform</h2> <ul> <li>CLI / Node.js</li> </ul> <h2>OAuth</h2> <ul> <li><strong>Client ID:</strong> 37685</li> <li><strong>OAuth Domain:</strong> stackexchange.com</li> </ul> <h2>Contact</h2> <p>hello@deepdna.ai</p> <h2>License</h2> <p>Private / Personal use</p> https://stackapps.com/q/12011 0 PLACEHOLDER - SC NP SC Integration Nilay Patel https://stackapps.com/users/158115 2026-03-24T05:30:00Z 2026-03-24T07:11:42Z <p>This is a private integration tool I am building to interact with the Stack Exchange community via the API. I will be using this to get questions which I only have interest in and not a whole lot of questions which do not make sense to me.</p> https://stackapps.com/q/12010 -1 ThaSha — MuleSoft DataWeave Content ThaSha https://stackapps.com/users/158100 2026-03-24T02:19:38Z 2026-03-24T02:19:38Z <h2>ThaSha</h2> <p>ThaSha is a content publishing pipeline for MuleSoft DataWeave patterns from the mulesoft-cookbook repository.</p> <p><strong>GitHub:</strong> <a href="https://github.com/shakarbisetty/mulesoft-cookbook" rel="nofollow noreferrer">https://github.com/shakarbisetty/mulesoft-cookbook</a></p> <p><strong>Type:</strong> Script</p> <p><strong>License:</strong> MIT</p> <p><strong>Version:</strong> 1.0</p> <p>This app publishes DataWeave pattern content to Stack Overflow as Q&amp;A pairs covering common integration traps and fixes.</p> https://stackapps.com/q/12006 -3 Cloudflare Support Agent — AI-assisted answers for Cloudflare-tagged questions Darshan Hegde https://stackapps.com/users/157454 2026-03-13T00:59:39Z 2026-03-13T01:04:23Z <p>AI-powered support agent that monitors Cloudflare-tagged questions and generates draft answers using RAG over official Cloudflare documentation.</p> https://stackapps.com/q/12002 0 FlywheelBot - Automated API content poster Donny https://stackapps.com/users/157237 2026-03-09T03:16:15Z 2026-03-09T03:17:26Z <h2>FlywheelBot</h2> <p>A personal automation script that posts API documentation and answers to Stack Overflow.</p> <p><strong>Type:</strong> Script (personal use only)</p> <p><strong>Author:</strong> donny.nguyen.business@gmail.com</p> <p><strong>Status:</strong> Development</p> https://stackapps.com/q/11996 1 Raw comment Markdown user3840170 https://stackapps.com/users/77981 2026-03-02T20:46:26Z 2026-03-02T20:46:26Z <p>Adds a discreet “MD” toggle next to every comment that allows you to view the comment’s raw Markdown code.</p> <pre class="lang-js prettyprint-override"><code>// ==UserScript== // @name Stack Exchange: raw comment Markdown // @grant none // @run-at document-start // @match https://*.stackexchange.com/* // @match https://*.superuser.com/* // @match https://*.stackoverflow.com/* // @match https://*.mathoverflow.net/* // @match https://*.serverfault.com/* // @match https://*.askubuntu.com/* // @match https://stackapps.com/* // @exclude https://api.stackexchange.com/* // @exclude https://data.stackexchange.com/* // @exclude https://openid.stackexchange.com/* // @exclude https://contests.stackoverflow.com/* // @exclude /^https?:\/\/winterbash\d{4,}\.stackexchange\.com\// // ==/UserScript== /*jshint curly:false*/ const html = (() =&gt; { const html = function (pieces, ...values) { if (new.target !== void 0) return Reflect.construct(String, [pieces], new.target); return new html(String.raw({ raw: pieces }, ...values.map( s =&gt; s instanceof html ? s : `${s}`.replaceAll( /[&lt;&gt;&amp;&quot;']/gu, c =&gt; `&amp;#${c.charCodeAt(0)};`)))); }; html.prototype = Object.create(String.prototype); return html; })(); const processNode = node =&gt; { if (!node?.matches('.js-comment')) return; if (node.querySelector('.--rmd-button')) return; const child = node.querySelector('.comment-date'); if (!child) return; child.insertAdjacentHTML( 'afterend', `&lt;button type=&quot;button&quot; class=&quot;--rmd-button s-btn s-btn__link&quot;&gt;md&lt;/button&gt;` ); }; const processUnder = node =&gt; { processNode(node); for (const subnode of node.querySelectorAll('.js-comment')) processNode(subnode); }; if (document.body) processUnder(document.body); new MutationObserver(mutations =&gt; { for (const mut of mutations) { switch (mut.type) { case 'childList': processUnder(mut.target); break; } } }).observe(document, { childList: true, subtree: true, }); document.addEventListener('click', (ev) =&gt; { if (!ev.target.matches('.--rmd-button')) return; const commentNode = ev.target.closest('.js-comment'); const { commentId } = commentNode.dataset; const oldNode = commentNode.querySelector('pre.--rmd-markup'); if (oldNode) { oldNode.remove(); return; } (async () =&gt; { const response = await fetch( `https://api.stackexchange.com/2.3/comments/${commentId}?${ new URLSearchParams({ 'site': location.host, 'filter': 'do(JZxI-6d1J5m2-r', })}`); const responseJson = await response.json(); commentNode.querySelector(':scope &gt; .comment-text').insertAdjacentHTML( 'beforeend', html` &lt;pre class=&quot;--rmd-markup&quot;&gt;${ responseJson.items[0].body_markdown }&lt;/pre&gt; `); })().catch(e =&gt; { alert(`[SE:rcM] ${e}`); }); }); const contentLoaded = new Promise((ok, ko) =&gt; { switch (document.readyState) { case 'complete': case 'interactive': ok(); return; case 'loading': break; default: ko(new TypeError(`readyState=${document.readyState}`)); } document.addEventListener('DOMContentLoaded', () =&gt; ok(), { once: true }); }); (async () =&gt; { await contentLoaded; document.head.insertAdjacentHTML('beforeend', ` &lt;style&gt; .s-btn.s-btn__link.--rmd-button { font-variant: small-caps; } pre.--rmd-markup { white-space: wrap; } &lt;/style&gt; `); })(); </code></pre> https://stackapps.com/q/11991 0 wm - StackOverflow question finder a113nw https://stackapps.com/users/156383 2026-02-21T17:25:20Z 2026-02-21T18:40:47Z <p>wm is a bot that finds unanswered Stack Overflow questions that I will find interesting and want to answer! It looks for questions on a few different metrics and then shows me the questions. I write an answer and ask it to post it.</p> <ul> <li>All answers are written by me (a human - funny that we have to say that these days)</li> <li>Uses Stack Exchange API v2.3</li> <li>OAuth with write_access scope</li> <li>Client ID: 36745</li> </ul> https://stackapps.com/q/11981 2 stack-exchange-notify-send.js - Live desktop notifications Daniel T https://stackapps.com/users/121649 2026-02-05T04:03:52Z 2026-02-05T19:36:16Z <!-- version: 1.0 --> <!-- tag: notifier --> <!-- excerpt: Extremely minimalist 2026 desktop notifier for Stack Exchange inbox/reputation --> <h3>About:</h3> <p>stack-exchange-notify-send.js is a extremely minimalist 2026 desktop notifier for Stack Exchange inbox/reputation. It's browserless, dependencyless, and permissionless. It's for people who need to have a code editor not Stack Exchange open, but still want to respond promptly to comments.</p> <p>The motivation was that <a href="https://meta.stackexchange.com/q/47750/1373352">4 other</a> desktop notifiers broke. It's difficult to install them because their GUI libraries require 2010s versions of GTK/Qt/etc, so mine requires no GUI library at all. Their parsing might've broke and now they might do nothing, so I chose to not do anything beyond the bare minimum parsing required, and just display the raw JSON. This philosophy should help stack-exchange-notify-send.js survive better. The WebSocket API's undocumented, but it's faster than RSS or polling.</p> <h3>Screenshot:</h3> <p><a href="https://i.sstatic.net/oTnNX73A.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/oTnNX73A.png" alt="stack-exchange-notify-send.js notifying upon receiving an inbox message" /></a></p> <h3>Install:</h3> <p>Just copypaste the code below into a <code>stack-exchange-notify-send.js</code> file. Add your <a href="https://stackexchange.com">https://stackexchange.com</a> userid. Ensure <a href="https://nodejs.org/en/download" rel="nofollow noreferrer">Node.js</a> is installed. Linux/macOS users, mark it as executable. Windows/macOS users, run <code>npm init</code> then <code>npm install node-notifier</code>. If desired, use KDE Linux system settings for autostart.</p> <p>Linux users can double-click to run, and Windows/all users can execute it with <code>node stack-exchange-notify-send.js</code></p> <pre class="lang-js prettyprint-override"><code>#!/usr/bin/env node // Go to https://stackexchange.com/ , click on your profile picture, // then copy the number in the URL here const stackexchange_com_userid = &quot;&quot;; let notifier; const title = &quot;Stack Exchange notify-send&quot;; console.log(title + &quot;: https://stackapps.com/q/11981/121649&quot;); if (process.platform === &quot;linux&quot;) { // Dependencyless on Linux const { spawn } = require(&quot;child_process&quot;); // https://reddit.com/r/kde/comments/if5oeb/notifications_from_script_not_saving_to_history/g2lvzvj/ const persist = [&quot;-h&quot;, &quot;string:desktop-entry:org.kde.konsole&quot;]; // libnotify-bin is default-installed on Ubuntu. Please install it if missing in other distros notifier = message =&gt; void spawn(&quot;notify-send&quot;, [...persist, title, message], { stdio: &quot;inherit&quot; }); } else { const { notify } = require(&quot;node-notifier&quot;); notifier = message =&gt; void notify({ title, message }); } // Surprising no authentication's required. const s = new WebSocket(&quot;wss://qa.sockets.stackexchange.com&quot;); // https://meta.stackexchange.com/q/218343/1373352 s.onmessage = e =&gt; { data = JSON.parse(e.data) console.log(e.data); if (data.action === &quot;hb&quot;) { s.send(&quot;pong&quot;); return; } notifier(e.data); // Crude but fault-tolerant // Omitted filtering out 1 -&gt; 0 upon clicking in browser. }; s.onopen = () =&gt; { console.log(&quot;Hello https://stackexchange.com/users/&quot; + stackexchange_com_userid) // Listen to all of the current user's inbox/reputation notifications across all sites // Chat's not targeted by this app except perhaps if a ping enters the inbox s.send(stackexchange_com_userid + &quot;-topbar&quot;); console.log(&quot;Connected. Now waiting for inbox messages or reputation changes...&quot;); }; </code></pre> <h3>Platform:</h3> <p>Linux, macOS, and Windows</p> <h3>Contact:</h3> <p>I created this app. You can contact me on Stack Exchange Chat.</p> <h3>License:</h3> <p>SPDX-License-Identifier: CC-BY-SA-4.0 OR MIT OR Apache-2.0</p> <h3>Code:</h3> <p>The Node.js programming language was used to write this. No frameworks or tools are required. You can contribute by submitting an answer or suggested edit. The source code is in the &quot;Install:&quot; section above.</p> https://stackapps.com/q/11973 0 PLACEHOLDER - Antigravity Publisher - Personal Tool castidia https://stackapps.com/users/155207 2026-01-26T09:00:22Z 2026-01-27T14:11:46Z <h2>Screenshot / Code Snippet</h2> <p>[None]</p> <h2>About</h2> <p>A minimal VS Code extension to publish questions to Stack Overflow. Personal use only.</p> <h3>License</h3> <p>MIT</p> <h3>Download</h3> <p>Private / In development</p> <h3>Platform</h3> <p>VS Code / Antigravity</p> <h2>Code</h2> <p>Local</p> https://stackapps.com/q/11909 2 Navigate through Challenges M-- https://stackapps.com/users/67095 2025-09-22T06:19:08Z 2026-03-06T19:22:41Z <h3>About</h3> <p>Stack Overflow's <a href="https://stackoverflow.com/beta/challenges">Challenges</a> can quickly become overwhelming when trying to track which posts you've already read or navigate back to someone's post. There are no pagination and posts are usually quite long, making scrolling at the very best tedious (if you're lucky enough to not scroll past what you need). This userscript provides a relatively clean navigation experience by adding view management and organization tools.</p> <p>The script adds four main features:</p> <ol> <li><p>Navigation menu: A simple dropdown menu showing all posts with author names, dates, and preview text, ordered based on the order that they appear on the page with a blue indicator (if you have moderation privileges, you'll see the deleted posts at the bottom with a red indicator).</p> </li> <li><p>Individual post management: Each posts gets a &quot;Viewed:&quot; checkbox that you can check when finished reading. Checked posts automatically collapse to show just a compact banner with author name and date information. You can hit &quot;Show&quot; to view the content and collapse it again by hitting &quot;Hide&quot;. Viewed posts get a green indicator in the dropdown menu.</p> </li> <li><p>Global toggle: An &quot;Expand/Collapse All Viewed&quot; button that lets you quickly show/hide all posts that you've marked as viewed.</p> </li> <li><p>Collapsed deleted posts for moderators. All the deleted posts are collapsed by default. You can expand them individually as needed.</p> </li> </ol> <p>Your viewing preferences persist across page reloads, so you can return to a Challenge and immediately see which posts are new since your last visit.</p> <p><img src="https://i.sstatic.net/0bM4twXC.png" alt="" /></p> <h3>Installation</h3> <p><a href="https://github.com/MdoubleDash/SOS_Userscripts/raw/refs/heads/main/Navigate%20Challenges.user.js" rel="nofollow noreferrer">Click to install with a script manager</a>. <strong>N.B.</strong> I have only tested this with Tampermonkey on Firefox.</p> <h3>Repository</h3> <p>Here is the source code for this userscript; <a href="https://github.com/MdoubleDash/SOS_Userscripts/" rel="nofollow noreferrer">source code repo</a></p> <p>Special thanks to <a href="https://stackapps.com/users/62199/vlaz">VLAZ</a> for their code review and suggestions.</p> https://stackapps.com/q/11823 1 Obtaining all tagIds given a list of tag names in API v3 chrispitude https://stackapps.com/users/135847 2025-06-19T00:44:17Z 2026-03-18T13:05:20Z <p>I am a Stack Overflow for Teams app developer, and given <a href="https://meta.stackexchange.com/questions/410541/stack-exchange-api-stack-apps-updates-and-upcoming-version-3-beta">this recent announcement</a> that API v3 is being extended to the public platform, I am hoping we can start asking API v3 questions here.</p> <p>Given a list of tag names:</p> <pre class="lang-python prettyprint-override"><code>tag_names = [ &quot;tag1&quot;, &quot;tag2&quot;, &quot;tag3&quot;, ] </code></pre> <p>I need to get the list of corresponding <code>tagId</code> integer values.</p> <p>The <code>/tags</code> route makes this a bit cumbersome because:</p> <ul> <li>The tag name is always a <code>partialName</code>, thus requiring unwanted matches to be filtered.</li> <li>Only one tag name can be specified per request, thus requiring multiple requests.</li> </ul> <p>This could be simplified if:</p> <ul> <li>A non-partial <code>name</code> parameter was supported.</li> <li>The <code>name</code> and <code>partialName</code> parameters were enhanced to support an array of strings.</li> </ul> <p>Has anyone else run into this challenge with API v3?</p> https://stackapps.com/q/10806 3 HeapExchange: Stack Q&A Client OhhhThatVarun https://stackapps.com/users/117437 2025-05-18T13:31:44Z 2026-03-07T10:40:12Z <p>HeapExchange is an Android app designed to bring the power of Stack Exchanage to your fingertips.</p> <ol> <li>Browse anonymously trending sites, questions by tag or topic</li> <li>View answers, vote, and read discussions</li> <li>Swiflty switch between sites</li> <li>Get notified</li> </ol> <p><em><strong>Edit (15-02-2026)</strong></em></p> <p>App is now live on PlayStore: <a href="https://play.google.com/store/apps/details?id=com.heapexchange" rel="nofollow noreferrer">https://play.google.com/store/apps/details?id=com.heapexchange</a></p> <p><a href="https://i.sstatic.net/9AjnJiKN.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/9AjnJiKN.jpg" alt="Screenshot" /></a> <a href="https://i.sstatic.net/7GqLbbeK.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/7GqLbbeK.jpg" alt="Screenshot" /></a> <a href="https://i.sstatic.net/mdG0gJhD.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/mdG0gJhD.jpg" alt="Screenshot" /></a> <a href="https://i.sstatic.net/82VLvtgT.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/82VLvtgT.jpg" alt="Screenshot" /></a> <a href="https://i.sstatic.net/XI8Fwupc.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/XI8Fwupc.jpg" alt="Screenshot" /></a> <a href="https://i.sstatic.net/UDeYxYED.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/UDeYxYED.jpg" alt="Screenshot" /></a></p> <p><em>App is currently in beta.</em></p> https://stackapps.com/q/10803 5 Copy code-blocks from Stack Exchange websites M-- https://stackapps.com/users/67095 2025-05-15T00:17:37Z 2026-02-01T07:41:56Z <h3>About</h3> <p>Highlighting and copying code from questions/answers is not as straightforward as one hopes it'd be. Throughout the years, there were (at least) a couple of <a href="https://stackapps.com/q/10195">userscripts</a>/<a href="https://stackapps.com/q/6753">extensions</a> to address this need. However, they are not maintained and the links are dead.</p> <p>I have found this <a href="https://gist.github.com/kpym/30d90be41ab5c248cdf7" rel="nofollow noreferrer">gist</a> by kpym to be still functional, however it could've used a facelift.</p> <p>This userscript (written off of the linked gist) adds a copy button to the top right corner of code blocks to copy the code from questions and answers.</p> <p><strong>Dark mode:</strong></p> <p><img src="https://i.sstatic.net/8Awl5gTK.gif" alt="" /></p> <p><strong>Light mode:</strong></p> <p><img src="https://i.sstatic.net/26IEJV2M.gif" alt="" /></p> <h3>Installation</h3> <p><a href="https://github.com/MdoubleDash/SOS_Userscripts/raw/refs/heads/main/Copy%20Code%20from%20StackExchange.user.js" rel="nofollow noreferrer">Click to install with a script manager</a>. <strong>N.B.</strong> I have only tested this with Tampermonkey on Firefox.</p> <h3>Repository</h3> <p>Here is the source code for this userscript; <a href="https://github.com/MdoubleDash/SOS_Userscripts/" rel="nofollow noreferrer">source code repo</a></p> https://stackapps.com/q/10611 1 How to Resolve "Applications must have a registered Stack Apps post to write" Error when Requesting Write Access via OAuth? Ashwini https://stackapps.com/users/108950 2024-09-19T07:29:10Z 2026-02-13T18:05:45Z <h3>Question Description:</h3> <p>I am developing an application that integrates with Stack Overflow’s API, and I need to enable write access for it. I’ve successfully registered my application on the <a href="https://stackapps.com/">Stack Apps site</a>, and I am trying to request OAuth write access with the following URL:</p> <p><a href="https://stackoverflow.com/oauth/dialog?client_id=26659&amp;scope=write_access&amp;redirect_uri=https://socialmedia.service.clouducaas.com/login_success">https://stackoverflow.com/oauth/dialog?client_id=26659&amp;scope=write_access&amp;redirect_uri=https://socialmedia.service.clouducaas.com/login_success</a></p> <p>However, I keep receiving the error:</p> <p><strong>&quot;Applications must have a registered Stack Apps post to write.&quot;</strong></p> <p>Here are the steps I've already followed:</p> <ul> <li>I have registered my app on Stack Apps and obtained my client ID.</li> <li>I used the correct <code>client_id</code> and <code>redirect_uri</code>.</li> <li>I included the <code>scope=write_access</code> parameter in my OAuth request.</li> </ul> <p>What could I be missing or doing wrong? How can I resolve this error and successfully enable write access for my application?</p> <p>Any guidance on how to correctly register the Stack Apps post and link it to my app would be greatly appreciated!</p> https://stackapps.com/q/9723 0 Error calling Stack Overflow Teams API using Python requests library Shadae https://stackapps.com/users/105922 2023-05-07T04:15:21Z 2026-01-21T12:04:45Z <p>I'm trying to call a PUT/DELETE request using the Stack Overflow Teams API in Python, but I'm encountering errors. <em>As an FYI, I have a working PAT that allows me to make get requests for articles and questions.</em> Specifically, I'm trying to create an article, update an article, and delete an article using the API, but the PUT/DELETE requests don't seem to be working. When I try to run the code, I get an error message that says <em><strong>&quot;no method found with this name</strong></em>&quot; or <em><strong>{&quot;error_id&quot;:400,&quot;error_message&quot;:&quot;title&quot;,&quot;error_name&quot;:&quot;bad_parameter&quot;}</strong></em>. The title might be the issue, but I don't think it goes against the requirements (string, 5 character+ length)</p> <p>I have tried running the API calls using Python's requests module, and I have checked that my authentication token is correct. I have also tried adjusting the order of the payload and double-checking that the headers are correct. However, I'm still getting errors.</p> <p>Here's my code (sanitized for privacy):</p> <pre><code>import json import os import requests from markdown_it import MarkdownIt def create_article(title, access_token): headers = { &quot;X-API-Access-Token&quot;: access_token, &quot;Content-Type&quot;: &quot;application/json&quot; } data = { &quot;title&quot;: title, &quot;body&quot;: &quot;TEST&quot;, &quot;tags&quot;: &quot;REDACTED&quot;, &quot;article_type&quot;: &quot;knowledge-article&quot;, &quot;filter&quot;: &quot;default&quot; } json_data = json.dumps(data) api_url = &quot;https://api.stackoverflowteams.com/2.3/articles/add?team=[TEAM_NAME]&quot; response = requests.post(api_url, headers=headers, data=json_data) print(f&quot;API response status: {response.status_code}&quot;) print(f&quot;API response text: {response.text}&quot;) return response.json() def delete_article(access_token, artId): headers = { &quot;X-API-Access-Token&quot;: access_token, &quot;Content-Type&quot;: &quot;application/json&quot; } data = { &quot;id&quot;: artId } json_data = json.dumps(data) api_url = f&quot;https://api.stackoverflowteams.com/2.3/articles/{artId}/delete?team=[TEAM_NAME]&quot; response = requests.delete(api_url, headers=headers, data=json_data) print(f&quot;API response status: {response.status_code}&quot;) print(f&quot;API response text: {response.text}&quot;) return response.json() def import_single_wiki_to_teams(input_directory, access_token, test_file): input_file = os.path.join(input_directory, test_file) if os.path.isfile(input_file): with open(input_file, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f: content = f.read() html_content = convert_md_to_html(content) # title = os.path.splitext(test_file)[0] title = &quot;TeArticle&quot; print(f&quot;Title from OS is: {title!r}&quot;) response = create_article('Test Article', access_token) # Use the title and html_content variables print(response) else: print(f&quot;File not found: {input_file}&quot;) input_directory = PATH access_token = [REDACTED] test_file = &quot;FILE_NAME&quot; import_single_wiki_to_teams(input_directory, access_token, test_file) </code></pre> https://stackapps.com/q/9611 34 OpenAI detector Glorfindel https://stackapps.com/users/34061 2022-12-23T20:21:25Z 2026-03-09T20:13:35Z <!-- thumbnail: https://i.sstatic.net/8Q61x.png --> <!-- version: 0.1 --> <!-- tag: [moderation] --> <!-- excerpt: Adds a button to check the probability that a post was written by a bot --> <h2>Screenshot / Code Snippet</h2> <p><a href="https://i.sstatic.net/mDMTr.png" rel="noreferrer"><img src="https://i.sstatic.net/mDMTr.png" alt="&quot;Detect OpenAI&quot; link in post menu; notice with results" /></a></p> <h2>About</h2> <p>This script adds a link to each post on SE, revision on SE revision pages, and post Markdown views on metasmoke, to check it against <a href="https://huggingface.co/openai-detector" rel="noreferrer">Hugging Face's AI detector</a>.</p> <p>The first click will test the Markdown text using the Hugging Face detector API for the likelihood it was created by GPT and report that as a percentage likelihood that the post is fake.</p> <p>Lots of users and spammers edit the text provided by ChatGPT a bit, so if you click the button a second time (or use <kbd>Alt</kbd>-<kbd>Click</kbd>) an iframe to the detector demo page will open with the Markdown text pre-filled for you, so you can try some manipulations to see if the content was edited from ChatGPT source text. For example, on metasmoke it looks like:</p> <p><a href="https://i.sstatic.net/5wyoP.gif" rel="noreferrer"><img src="https://i.sstatic.net/5wyoP.gif" alt="Animation of a post on metasmoke. First the base % FAKE is determined of 24.94%, then an iframe is opened showing that after removal of the spammer's added text the detection is 99.86% FAKE" /></a></p> <h3>Download</h3> <p>The script can be installed via <a href="https://github.com/Glorfindel83/SE-Userscripts/raw/master/openai-detector/openai-detector.user.js" rel="noreferrer">this link</a>; source code can be found <a href="https://github.com/Glorfindel83/SE-Userscripts/blob/master/openai-detector/openai-detector.user.js" rel="noreferrer">here</a>.</p> <h3>Platform</h3> <p>Tested with Violentmonkey in Firefox on macOS, but it's likely to work on all browsers and platforms. (Please let me know if it doesn't!)</p> <h2>Contact</h2> <p>Post a comment or answer here, or create an issue/pull request on GitHub.</p> https://stackapps.com/q/9472 1 JSONDecodeError: Expecting value: line 3 column 1 (char 3) Sparkling_Sayena https://stackapps.com/users/96752 2022-08-01T17:21:39Z 2026-03-26T22:40:39Z <p>I am trying the following simple code to get JSON from the Stack Exchange API and it gives me the following error:</p> <blockquote> <p>JSONDecodeError: Expecting value: line 3 column 1 (char 3)</p> </blockquote> <p>Here is my script:</p> <pre><code>import requests import json url='https://api.stackexchange.com/docs/questions#order=desc&amp;sort=activity&amp;filter=default&amp;site=stackoverflow&amp;run=true' r = requests.get(url) r.json() </code></pre> https://stackapps.com/q/8892 9 Stack Exchange One-Click Reviews gparyani https://stackapps.com/users/27674 2021-03-22T06:21:52Z 2026-02-16T00:00:45Z <!-- version: 1.1 --> <!-- tag: review --> <!-- excerpt: Review items on Stack Exchange by simply clicking on the review action, rather than having to select and choose Submit --> <h2>About</h2> <p>The new UI for reviews introduced in early 2021 requires two clicks to submit reviews for an item: once to select the action, and a second time to submit the review. By contrast, the previous UI simply required a single click on an action button to submit a review.</p> <p>Some users prefer the old behavior of simply having one click to submit a review. This script removes the requirement for a second click on the Submit button, and makes it so that clicking on a review action will immediately submit the review, restoring the former behavior of the old queue layout.</p> <h3>Notes</h3> <ul> <li>To discourage robo-reviewing, there is a slight delay baked into the script: if you click on a review action too early, it will simply select the button without submitting the review.</li> </ul> <h3>Download</h3> <p><a href="https://gitcdn.xyz/repo/gparyani/2bcc29740ab0da5fe38eff84e2a45efd/raw/d548b0b9a7a9480471d7888fa1ce64ea9462be14/oneclickreview.user.js" rel="nofollow noreferrer">Link to install the user script</a>. You will need to have a user script manager extension installed in your browser, such as Tampermonkey or Violentmonkey.</p> <h3>Platform</h3> <p>Tested with Tampermonkey on Microsoft Edge (new Chromium-based version) on Windows. Haven't tested with other browsers or user script managers, but should work with other platforms too.</p> <h2>Code</h2> <p><a href="https://gist.github.com/gparyani/2bcc29740ab0da5fe38eff84e2a45efd" rel="nofollow noreferrer">Source code</a></p> https://stackapps.com/q/8168 8 Why has my daily quota increased from 10k to 2 billion? Glorfindel https://stackapps.com/users/34061 2018-12-24T08:55:56Z 2026-02-04T16:17:11Z <p>I'm using the Stack Exchange API with an access token and API key, and I was just checking my remaining quota. According to the <a href="https://api.stackexchange.com/docs/throttle">documentation</a>, this should be a number (somewhat) lower than 10,000, which is consistent what I've seen in the past.</p> <p>However, to my surprise, today it's more like the 32-bit integer maximum:</p> <p><a href="https://i.sstatic.net/AvG3s.png" rel="noreferrer"><img src="https://i.sstatic.net/AvG3s.png" alt="enter image description here"></a></p> <p>This happens for multiple API routes, not just for /sites. I do get occasional backoffs, which I obey to. What's going on here? Santa Exchange giving out unlimited quota as Christmas presents? It does not matter which IP address I'm calling the API from.</p> https://stackapps.com/q/4467 8 TrueBadges, a combination of StackExchange badges and TrueAchievements A.L https://stackapps.com/users/24266 2013-12-29T02:51:07Z 2026-03-22T05:04:35Z <!-- thumbnail: https://static.truebadges.com/screenshot_144_119.png --> <!-- version: 1.0 --> <!-- tag: badges --> <!-- excerpt: Know the *real* value of your StackExchange badges --> <h2>Screenshot</h2> <p><a href="http://truebadges.com/" rel="nofollow noreferrer"><img src="https://static.truebadges.com/screenshot.png" alt="TrueBadges" /> TrueBadges</a></p> <p>I've worked on this website since end of 2013 in my spare time. The initial goal was to <em>have fun</em> with <em>lot of data</em>.</p> <p>The idea is to count StackExchange badges of an user in the same way as TrueAchievements does. This project has no practical use, you can view it as a fun website in order to have an overview of the efforts you put in StackExchange websites.</p> <h2>About</h2> <h3>TrueAchievements (TA)</h3> <p><a href="http://www.trueachievements.com/" rel="nofollow noreferrer">TrueAchievements</a> is a website dedicated to Xbox and Windows games' achievements. Achievements are rewards given to players for realizing specific actions (complete a game, win 20 rounds in online game, etc.). Each achievement is associated with a score from <a href="http://www.trueachievements.com/a28781/stop-n-swop-achievement.htm" rel="nofollow noreferrer">0</a> to <a href="http://www.trueachievements.com/a12922/one-with-combat-achievement.htm" rel="nofollow noreferrer">300</a> (or more). The idea behind TrueAchievements is that the score can be corrected by the percentage of players having unlocked an achievement compared to the numbers of players who own a game. For example, it's easier to <a href="http://www.trueachievements.com/a21049/off-the-boat-achievement.htm" rel="nofollow noreferrer">get 5 points by starting the game GTA IV</a> than <a href="http://www.trueachievements.com/a21084/no-more-strangers-achievement.htm" rel="nofollow noreferrer">meeting all the random characters</a>. So the first achievement is worth 5 TA score and the second one is worth 13 TA score.</p> <h3>StackExchange Badges (SEB)</h3> <p>Badges are very similar to achievements, but they are only associated to bronze, silver or gold rank, they have no value in points.</p> <h3>TrueBadges</h3> <p>I want to use the same calculation in order to calculate a score based on the SEB earned by an user in all of the StackExchange websites. Note that this score is different from the reputation, even if the two scores are more or less correlated (eg. good answers give reputation and badges).</p> <p>The value of each badge is calculated from the number of times a badge has been earned divided by the number of times the most earned badge has been earner. In other words, the rarest badges will be worth more points. The formula is still not perfect, I have to decide if I should cap score of each badge. Some badges are awarded only once, their value can be huge.</p> <p>For each site, the website (TrueBadges) need to grab all the badges and the number of times they are awarded. Then the score of each badge can be calculated. Edit: the formula has been designed with the help of <a href="https://math.stackexchange.com/questions/630909/calculate-adjusted-reciprocal-values-from-a-sequence-of-numbers">Mathematics (Stack Exchange)</a>.</p> <p>Once a user register to TrueBadges (the only required data is the id of the user on StackExchange), the website has to make several requests:</p> <ol> <li>Get the websites where the user logged in (StackOverflow, Arqade, etc.)</li> <li>Get all the badges from the user on each site</li> <li>Calculate the score for each badge of the user (a badge can be earned multiple times, so the value of a badge can be multiplied)</li> <li>Calculate the score for each site</li> <li>Calculate the total score of the user</li> </ol> <h3>Code</h3> <p>I use Symfony2 (a PHP framework) and Doctrine2 (an abstraction layer for MySQL).</p> <p>Here is the current database schema:</p> <p><a href="https://i.sstatic.net/MB2Q9.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/MB2Q9m.png" alt="MySQL schema" /></a></p> <h3>Status</h3> <p>The <a href="http://truebadges.com/" rel="nofollow noreferrer">website is online</a> since beginning of 2014. <a href="http://truebadges.com/users/register/" rel="nofollow noreferrer">Registration</a> is opened and takes less than a minute.</p> https://stackapps.com/q/3712 2 Is there a difference between the API search and the search from within the site? James Mertz https://stackapps.com/users/4961 2012-10-15T17:17:28Z 2026-03-14T23:05:10Z <p>I'm curious if the search results from the API is calculated the same way as the searches from within the sites themselves?</p> <p>Is there a difference between the two? If so, what are the differences?</p> https://stackapps.com/q/3536 5 Stacklense - Ubuntu Unity Lens to search Stack Exchange sites Stef K https://stackapps.com/users/11648 2012-07-12T00:21:20Z 2026-03-15T09:37:05Z <!-- version: 12.07.06 --> <!-- tag: ubuntu-unity --> <!-- excerpt: Stacklense uses Ubuntu Unity Lenses feature to search through questions titles and return results from answered, questions hosted at Stack Exchange sites. --> <h2>Screenshot / Code Snippet</h2> <p><img src="https://iccode.net/wp-content/uploads/2013/05/stacklense_starting.png" alt="" /></p> <p><img src="https://iccode.net/wp-content/uploads/2013/05/stacklense_results.png" alt="" /></p> <p>The application makes searches in question titles.</p> <p>Please note that the lens will show only answered questions!</p> <p>The names of the sites are usually one word, for example Ask Ubuntu becomes askubuntu, all names can be found at <a href="https://api.stackexchange.com/docs/sites#filter=default&amp;run=true">https://api.stackexchange.com/docs/sites#filter=default&amp;run=true</a> look for the &quot;api_site_parameter&quot;:</p> <p>Examples</p> <ol> <li><p>search for python django at Stack Overflow site:<br /> Type: <code>python django ~~stackoverflow;</code></p> </li> <li><p>search for ppa at Ask Ubuntu site:<br /> Type: <code>ppa ~~askubuntu;</code></p> </li> <li><p>search for mac os x lion at Super User site:<br /> Type: <code>mac os x lion ~~superuser;</code></p> </li> </ol> <h2>About</h2> <p>Stacklense is written with Python 2 (json, cStringIO, urllib2), using Stack Exchange API, Ubuntu Quickly workflow - platform; the code and the personal package archives are hosted at Launchpad. It is written for people who like to mess with computers - programming languages and all the stuff Stack Exchange and Ubuntu Linux freely provide, with hope that may be useful to someone or hopefully to many out there.</p> <h3>License</h3> <p>Stacklense is free (as in freedom) software distributed under GNU General Public License v3.</p> <h3>Download</h3> <p>You can find the ppa at <a href="https://launchpad.net/%7Eiccode/+archive/staclense" rel="nofollow noreferrer">https://launchpad.net/~iccode/+archive/staclense</a>, instructions for installation at <a href="http://answers.launchpad.net/staclense/+faq/1998" rel="nofollow noreferrer">http://answers.launchpad.net/staclense/+faq/1998</a></p> <h3>Platform</h3> <p>Stacklense is written and tested on Ubuntu 12.04 LTS 64 bit, using the Unity Lenses feature;it will probably work on 32 bit architecture too (i386 build at ppa). There is a package for Ubuntu 12.10 available at Launchpad but not tested.</p> <h2>Contact</h2> <p>You can reach me using stef[at]iccode.net or at Launchpad. I am the only contributor since it is a small application but anyone can join if has ideas to implement - or wants to tweak the code.</p> <h2>Code</h2> <p>Python 2.X (default shipped with Ubuntu 12.04) using standard library modules only. Ubuntu Quickly, Stack Echange API, Launchpad (as mentioned above to get the code or to contribute (open for all [may need to contact me first, i am not sure if i need to add you first])</p> <h2>Made with</h2> <p><a href="https://wiki.ubuntu.com/Quickly" rel="nofollow noreferrer">Ubuntu Quickly</a></p> <p><a href="http://api.stackexchange.com/">Stack Exchange API</a></p> https://stackapps.com/q/1 109 API Documentation and Help Kevin Montrose https://stackapps.com/users/2 2010-05-19T21:31:53Z 2026-02-17T15:41:06Z <h2>Method List</h2> <p>All API methods can be found at <a href="https://api.stackexchange.com/docs"><code>https://api.stackexchange.com/docs</code></a>.</p> <h3>Global Method Parameters</h3> <p>All methods accept the following parameters:</p> <ul> <li><code>type=jsontext</code>: responds with mime-type <code>text/json</code>.</li> <li><code>callback=functionname</code>: returns <a href="http://en.wikipedia.org/wiki/JSONP#JSONP" rel="nofollow noreferrer">JSON with Padding</a> instead of standard JSON</li> <li><code>filter={filter}</code>: specifies which fields to return</li> <li><strong>Deprecated</strong>: <code>key={key}</code>: validates this request to a specific application. (More <a href="https://stackapps.com/questions/2/getting-started-with-the-api">here</a>) <ul> <li>API keys should be passed as Authorization headers with a Bearer scheme, e.g. <code>Authorization: Bearer {API_KEY}</code>. (<a href="https://meta.stackexchange.com/q/417382">Read more about this change</a>)</li> </ul> </li> </ul> <p>Site specific methods also take</p> <ul> <li><code>site={sitename}</code>: specifies the site to query against, can be the full domain name or just part <ul> <li>for example <code>stackoverflow.com</code>, <code>askubuntu</code>, and <code>gaming</code> are all valid</li> </ul> </li> </ul> <h2>Authentication</h2> <p>Updates to authentication options were released in June 2025 and are documented at <a href="https://stackapps.com/help/api-authentication"><code>https://stackapps.com/help/api-authentication</code></a></p> <h2>Supported Sites</h2> <p>Every site in the <a href="http://stackexchange.com/sites">Stack Exchange network</a> supports the API, with the exceptions of <a href="http://stackexchange.com/">stackexchange.com</a>, and <a href="http://area51.stackexchange.com/">Area 51</a>.</p> <h3>Deprecated Help</h3> <p>Old help methods can be found at <a href="http://api.stackoverflow.com/1.1/usage" rel="nofollow noreferrer"><code>http://api.stackoverflow.com/1.1/usage</code></a>. Further details may be found in the <a href="https://stackapps.com/posts/1/revisions">revision history of this post</a>.</p> https://stackapps.com/q/2511 40 Fast Multi Platform Data Dump Import for SQL Server (2000/2005/2008), SQLite and MySQL Sky Sanders https://stackapps.com/users/14 2010-04-02T23:38:52Z 2026-04-06T05:57:41Z <p><strong>UPDATE</strong>:</p> <h2>Both soapi.info and skysanders.net have been offline for a while.</h2> <hr> <hr> <p>The application readme file and hosting will be moved to <a href="http://soapi.info/tools/soddi.aspx" rel="nofollow noreferrer">http://soapi.info/tools/soddi.aspx</a>.</p> <hr> <p>Links are in the readme text below.</p> <p><img src="https://i.sstatic.net/oIsxX.png" alt="??? SODDI dialog"></p> <pre> <strong>Stack Overflow Data Dump Import v.11</strong> ClickOnce Installer: <a href="http://skysanders.net/tools/se/soddi/publish.htm" rel="nofollow noreferrer">http://skysanders.net/tools/se/soddi/publish.htm</a> (c) 2010 Sky Sanders licensed under MIT/GPL - see license.txt msi :<a href="http://skysanders.net/files/soddi.11.msi" rel="nofollow noreferrer">http://skysanders.net/files/soddi.11.msi</a> info:<a href="http://skysanders.net/tools/se" rel="nofollow noreferrer">http://skysanders.net/tools/se</a> bin :<a href="http://skysanders.net/files/soddi.11.zip" rel="nofollow noreferrer">http://skysanders.net/files/soddi.11.zip</a> src :<a href="http://bitbucket.org/bitpusher/soddi/" rel="nofollow noreferrer">http://bitbucket.org/bitpusher/soddi/</a> SODDI is a .NET 3.5 SP1 executable written in C# that quickly and cleanly imports Stack&nbsp;Overflow Data Dump XML files into [SQL&nbsp;Server][3] 2000/05/08, [MySQL][4] 5.1 and [SQLite][5] 3 (MySQL and SQLite drivers are included). SODDI can be run as a command line utility or, when invoked with no arguments or GUI argument, will present a [Windows Forms][6] interface. <strong>Quick Start:</strong> The quickest route to your own copy of the Stack Overflow databases is to use the ClickOnce installer, browse to the uncompressed data dump, accept the default SQLite provider selection and click 'Import'. <strong>USAGE:</strong> soddi.exe source:"" target:"" [batch:5000] [split] [indices] [fulltext] [[meta] [so] [su] [sf]] [gui] SOURCE The directory containing the individual site directories. NOTE: do not include trailing slash in quoted path as the arg parser will interpret it as an escaped quote and puke. TARGET A valid ADO.NET connection string, including the provider invariant name. Platform specific connection string details: SQL Server: the database must exist. Data will be loaded into tables segregated by schema named as the site data being imported. e.g. so.Users, meta.Users. The tables are dropped before import. MySQL: The connection string should include server, each site's data will be loaded into a database named as the site imported. The databases will be dropped and recreated before import. SQLite: The connection string should specify a directory. The data will be imported into separate .db3 files, each named as the site imported. Existing data files will be overwritten. The target database/datafile/schema names can be modified by explicitly specifying sites to import and appending the desired schema as a parameter value or editing the Sites list item schema in the GUI. -- OPTIONAL ARGUMENTS SPLIT Normalize post tags by splitting the concatenated Posts.Tags field into individual rows in a separate PostTags table. INDICES Enables useful indexes on each table. FULLTEXT Enables a full text index on Posts.Body and Posts.Title - SQL Server only. BATCH Number of rows inserted in each transaction. Default 5000. GUI Presents a Windows Forms interface. If SODDI is invoked with arguments and GUI, the UI will be populated with the supplied arguments. The console window will remain open to receive all debug and error output. META|SO|SU|SF Specifies which sites to import. If none are specified, all site directories found in SOURCE will be imported. To specify a different target name simply treat the site name as a parameter. e.g. SQL Server - SO:StackOverflowData will load the data from the XXXXX SO directory into the database specified in the connection string and the schema 'StackOverflowData' MySQL - SO:StackOverflowData will load the data from the XXXXX SO directory into a new database named StackOverflowData on the server specified in the connection string. SQLite - SO:StackOverflowData will load the data from the XXXXX SO directory into a new db3 file named StackOverflowData.db3 in the directory specified in the connection string. In GUI mode you may edit the schema item in the Sites list. Options are not case sensitive. Example command lines. GUI Mode: soddi SQLite - all sites: soddi source:"F:\Export-030110" target:"data source=c:\temp;version=3;new=True;Provider=System.Data.SQLite" MySQL - all sites: soddi source:"F:\Export-030110" target:"server=localhost;user id=root;password=p@ssW0rd;Provider=MySql.Data.MySqlClient" MySQL - Meta StackOverflow and StackOverflow data into specified databases: soddi source:"F:\Export-030110" target:"server=localhost;user id=root;password=p@ssW0rd;Provider=MySql.Data.MySqlClient" meta:MetaDb so:SoDb SQL Server - all sites: soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" SQL Server - Stack Overflow data only (SO): soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so SQL Server - Stack Overflow data only into schema dbo: soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so:dbo SQL Server - Stack Overflow data only, split tags and add indices: soddi source:"F:\Export-030110" target:"data source=(local);initial catalog=SOData;integrated security=true;Provider=System.Data.SqlClient" so split indices The latest data dump can be found at <a href="http://blog.stackoverflow.com/category/cc-wiki-dump/">http://blog.stackoverflow.com/category/cc-wiki-dump/</a> 04/01/2010 - Sky Sanders 04/09/2010 - Explicitly set platform to x86 to allow same binaries to run on x64. </pre>