<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rushikesh Pundkar</title>
    <description>The latest articles on DEV Community by Rushikesh Pundkar (@rushikesh_pundkar_913318c).</description>
    <link>https://dev.to/rushikesh_pundkar_913318c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2830674%2Fed08079d-0ab5-47b3-a03d-4d832572bee0.jpg</url>
      <title>DEV Community: Rushikesh Pundkar</title>
      <link>https://dev.to/rushikesh_pundkar_913318c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rushikesh_pundkar_913318c"/>
    <language>en</language>
    <item>
      <title>(BOOST)</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sat, 18 Oct 2025 07:59:15 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/boost-2gi4</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/boost-2gi4</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/rushikesh_pundkar_913318c" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2830674%2Fed08079d-0ab5-47b3-a03d-4d832572bee0.jpg" alt="rushikesh_pundkar_913318c"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/rushikesh_pundkar_913318c/ai-secured-github-system-integrate-23oo" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Ai secured GitHub system integrate&lt;/h2&gt;
      &lt;h3&gt;Rushikesh Pundkar ・ Oct 18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Ai secured GitHub system integrate</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sat, 18 Oct 2025 07:57:45 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/ai-secured-github-system-integrate-23oo</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/ai-secured-github-system-integrate-23oo</guid>
      <description>&lt;p&gt;This repository, &lt;strong&gt;AI-Secure-build-for-github&lt;/strong&gt;, is for an "Ai secured deployment," likely a template for an application utilizing the Gemini API with a focus on security.&lt;/p&gt;

&lt;p&gt;Here are a few prompts you could use with the AI application this repository is designed to deploy, depending on its specific function:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Prompts for AI Secure Deployment&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Security Analysis Prompt:&lt;/strong&gt;
&amp;gt; "Analyze the provided Python dependency list for potential security vulnerabilities and suggest equivalent, well-maintained packages or specific version updates to mitigate high-severity risks."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Infrastructure Prompt:&lt;/strong&gt;
&amp;gt; "Draft a secure Terraform configuration for deploying a &lt;strong&gt;Gemini API&lt;/strong&gt; service to Google Cloud Run, ensuring the service account uses the principle of least privilege and all secrets are managed via Secret Manager."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Code Review Prompt:&lt;/strong&gt;
&amp;gt; "Review the &lt;code&gt;services/ai_handler.ts&lt;/code&gt; file for any hardcoded API keys or insecure handling of user inputs, and propose changes to comply with OWASP top 10 secure coding practices."&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>accessible-todo-app</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Thu, 16 Oct 2025 15:32:06 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/accessible-todo-app-35cf</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/accessible-todo-app-35cf</guid>
      <description>&lt;p&gt;Repo:&lt;a href="https://github.com/rushikesh648/accessible-todo-app" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/accessible-todo-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frontend Development Prompt: Accessible To-Do List App&lt;/p&gt;

&lt;p&gt;Project Goal: Implement a simple, single-page To-Do List application that is designed from the ground up for accessibility, ensuring a robust and intuitive experience for all users, including those relying on screen readers and keyboard navigation.&lt;/p&gt;

&lt;p&gt;Technology Stack:&lt;/p&gt;

&lt;p&gt;HTML5: Semantic structure, ARIA attributes.&lt;/p&gt;

&lt;p&gt;CSS3: Styling, clear focus indicators, basic responsive design.&lt;/p&gt;

&lt;p&gt;JavaScript (Vanilla JS): Core logic, DOM manipulation, accessibility API interaction.&lt;/p&gt;

&lt;p&gt;Part 1: Core Application Structure &amp;amp; Styling&lt;/p&gt;

&lt;p&gt;HTML Structure (index.html):&lt;/p&gt;

&lt;p&gt;Create a well-structured index.html file.&lt;/p&gt;

&lt;p&gt;Include a &amp;lt;!DOCTYPE html&amp;gt; declaration and lang="en" on the  tag.&lt;/p&gt;

&lt;p&gt;Set up a &lt;/p&gt; with appropriate  tags and a .

&lt;p&gt;Implement the main layout with a  containing the app title (&lt;/p&gt;
&lt;h1&gt;), a  section for the form and task list, and an optional .&lt;/h1&gt;

&lt;p&gt;Include an empty &lt;/p&gt;
&lt;ul&gt; element with a descriptive id (e.g., id="todo-list") where tasks will be rendered.

&lt;p&gt;Add a hidden aria-live="polite" region (e.g., &lt;/p&gt;) for general announcements.

&lt;p&gt;Base CSS Styling (style.css):&lt;/p&gt;

&lt;p&gt;Apply a clean, high-contrast default theme for readability.&lt;/p&gt;

&lt;p&gt;Define the .sr-only class to visually hide content while keeping it accessible to screen readers.&lt;/p&gt;

&lt;p&gt;Ensure all interactive elements (input fields, buttons) have a clear, visible outline style when they receive :focus (e.g., outline: 2px solid #007bff; outline-offset: 2px;). This is crucial for keyboard navigation.&lt;/p&gt;

&lt;p&gt;Style the main containers, form elements, and list items for basic presentation.&lt;/p&gt;

&lt;p&gt;JavaScript Initialization (script.js):&lt;/p&gt;

&lt;p&gt;Ensure your script runs after the DOM is fully loaded (DOMContentLoaded event).&lt;/p&gt;

&lt;p&gt;Define an array to hold your to-do items (e.g., let todos = []; where each item is an object { id: number, text: string, completed: boolean }).&lt;/p&gt;

&lt;p&gt;Create a function renderTodos() that clears the existing list and dynamically populates the todo-list &lt;/p&gt;

&lt;ul&gt; based on the todos array. This function should be called initially when the app loads.

&lt;p&gt;Part 2: Essential Features &amp;amp; Accessibility Implementation&lt;/p&gt;

&lt;p&gt;For each feature below, ensure full keyboard navigability and clear screen reader feedback.&lt;/p&gt;

&lt;p&gt;Add New To-Do Item:&lt;/p&gt;

&lt;p&gt;HTML:&lt;/p&gt;

&lt;p&gt;Create a &lt;/p&gt;
&lt;/ul&gt;


&lt;/ul&gt; element containing a  explicitly linked to an  field (e.g., for="new-todo-item").

&lt;p&gt;Include a "Add Item" .&lt;/p&gt;

&lt;p&gt;Add a placeholder attribute to the input as a hint (not a label replacement).&lt;/p&gt;

&lt;p&gt;Include an element for displaying error messages (e.g., &lt;/p&gt;).

&lt;p&gt;JavaScript:&lt;/p&gt;

&lt;p&gt;Attach an event listener to the form's submit event.&lt;/p&gt;

&lt;p&gt;Prevent default form submission.&lt;/p&gt;

&lt;p&gt;Get the value from the input field.&lt;/p&gt;

&lt;p&gt;Validation: If the input is empty:&lt;/p&gt;

&lt;p&gt;Display an error message to the user.&lt;/p&gt;

&lt;p&gt;Update the error-message element's text and make it visible.&lt;/p&gt;

&lt;p&gt;Set aria-invalid="true" on the input field.&lt;/p&gt;

&lt;p&gt;Crucially, set focus back to the input field (input.focus()).&lt;/p&gt;

&lt;p&gt;If valid:&lt;/p&gt;

&lt;p&gt;Add a new to-do object to the todos array.&lt;/p&gt;

&lt;p&gt;Clear the input field.&lt;/p&gt;

&lt;p&gt;Call renderTodos() to update the list.&lt;/p&gt;

&lt;p&gt;Use the screen-reader-announcer to announce the addition (e.g., "New task added: [Task Text].").&lt;/p&gt;

&lt;p&gt;Return focus to the input field for quick subsequent additions.&lt;/p&gt;

&lt;p&gt;Display To-Do Items:&lt;/p&gt;

&lt;p&gt;JavaScript (within renderTodos()):&lt;/p&gt;

&lt;p&gt;For each to-do item in the todos array, create an &lt;/p&gt;
&lt;li&gt; element.

&lt;p&gt;Inside each &lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;, include:

&lt;p&gt;A &lt;span&gt; to display the task text.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;A "Complete" button.&lt;/p&gt;

&lt;p&gt;A "Delete" button.&lt;/p&gt;

&lt;p&gt;Accessibility:&lt;/p&gt;

&lt;p&gt;Dynamically add aria-label attributes to the "Complete" and "Delete" buttons, making them descriptive (e.g., Complete, Delete).&lt;/p&gt;

&lt;p&gt;If a task is completed, apply a visual strikethrough effect to its text via CSS.&lt;/p&gt;

&lt;p&gt;If a task is completed, also add an aria-label to the text &lt;span&gt; (e.g., &lt;span&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Mark To-Do as Complete/Incomplete:&lt;/p&gt;

&lt;p&gt;JavaScript:&lt;/p&gt;

&lt;p&gt;Attach event listeners to the "Complete" buttons (use event delegation if generating many buttons).&lt;/p&gt;

&lt;p&gt;Toggle the completed status of the corresponding to-do item in the todos array.&lt;/p&gt;

&lt;p&gt;Call renderTodos() to refresh the display.&lt;/p&gt;

&lt;p&gt;Use the screen-reader-announcer to announce the status change (e.g., "Task [Task Text] marked as complete.").&lt;/p&gt;

&lt;p&gt;Delete To-Do Item:&lt;/p&gt;

&lt;p&gt;JavaScript:&lt;/p&gt;

&lt;p&gt;Attach event listeners to the "Delete" buttons.&lt;/p&gt;

&lt;p&gt;Remove the corresponding to-do item from the todos array.&lt;/p&gt;

&lt;p&gt;Call renderTodos() to refresh the display.&lt;/p&gt;

&lt;p&gt;Use the screen-reader-announcer to announce the deletion (e.g., "Task [Task Text] deleted.").&lt;/p&gt;

&lt;p&gt;Return focus to the input field after deletion for a smooth workflow.&lt;/p&gt;

&lt;p&gt;No Tasks Message:&lt;/p&gt;

&lt;p&gt;HTML: Include a &lt;/p&gt;

&lt;p id="no-tasks-message"&gt;No tasks yet. Add one above!&lt;/p&gt;.

&lt;p&gt;JavaScript: Dynamically show/hide this message based on whether the todos array is empty.&lt;/p&gt;

&lt;p&gt;Part 3: Testing &amp;amp; Deliverables&lt;/p&gt;

&lt;p&gt;Self-Evaluation:&lt;/p&gt;

&lt;p&gt;Keyboard-Only Test: Can you add, complete, and delete tasks using only the keyboard (Tab, Shift+Tab, Enter, Space)? Does focus move logically?&lt;/p&gt;

&lt;p&gt;Screen Reader Test: (Simulate or use a real screen reader like NVDA/VoiceOver) Does the screen reader announce form labels, button actions, and dynamic updates (additions, completions, deletions) clearly and correctly? Are error messages announced promptly?&lt;/p&gt;

&lt;p&gt;Deliverables:&lt;/p&gt;

&lt;p&gt;Functional Frontend App: index.html, style.css, script.js files.&lt;/p&gt;

&lt;p&gt;Clear Code Comments: Especially for accessibility-specific choices (ARIA attributes, focus management, announcements).&lt;/p&gt;

&lt;p&gt;A README.md file in the project root containing:&lt;/p&gt;

&lt;p&gt;A brief overview of your accessible To-Do List App.&lt;/p&gt;

&lt;p&gt;Instructions on how to run the application locally.&lt;/p&gt;

&lt;p&gt;A summary of the key accessibility features implemented.&lt;/p&gt;

&lt;p&gt;Your findings from the self-evaluation/screen reader testing.&lt;/p&gt;

&lt;p&gt;Success Criteria:&lt;/p&gt;

&lt;p&gt;The application is fully functional and responsive to user input.&lt;/p&gt;

&lt;p&gt;All interactive elements are reachable and operable via keyboard.&lt;/p&gt;

&lt;p&gt;Screen reader users receive accurate and helpful feedback for all interactions and dynamic content changes.&lt;/p&gt;

&lt;p&gt;The UI is clean and maintains good contrast.&lt;/p&gt;

&lt;p&gt;The code is well-organized and easy to understand.&lt;/p&gt;

&lt;p&gt;This prompt provides a comprehensive guide for building an accessible To-Do List, ensuring the developer considers inclusivity at every step.&lt;/p&gt;


&lt;/li&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>ai application</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sat, 11 Oct 2025 09:31:31 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/ai-application-3noj</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/ai-application-3noj</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/rushikesh648/Ai-dashboard" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/Ai-dashboard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agenticpostgreschallenge</category>
    </item>
    <item>
      <title>Food distribution portal</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Thu, 09 Oct 2025 11:10:51 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/food-distribution-portal-5h30</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/food-distribution-portal-5h30</guid>
      <description>&lt;h2&gt;
  
  
  🎃 Hacktoberfest Challenge: Food-Distribution-Portal- 🍽️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/rushikesh648/Food-distribution-portal-" rel="noopener noreferrer"&gt;rushikesh648/Food-distribution-portal-&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/rushikesh648/Food-distribution-portal-" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/Food-distribution-portal-&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Project Goal:&lt;/strong&gt; To create a web portal that facilitates the distribution of food, connecting donors/organizations with those in need.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Boost Developer Experience and Project Setup
&lt;/h3&gt;

&lt;p&gt;The current portal needs foundational contributions to make it easier for future developers to join and contribute. Your challenge is to improve the documentation, code quality, or development workflow.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;one (or more!)&lt;/strong&gt; of the following tasks to complete:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. 📝 Documentation Master (Highest Priority)
&lt;/h4&gt;

&lt;p&gt;The project currently lacks a detailed description. Create a comprehensive &lt;code&gt;README.md&lt;/code&gt; file that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A brief, engaging &lt;strong&gt;Project Description&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A list of &lt;strong&gt;Technologies Used&lt;/strong&gt; (e.g., JavaScript, React/JSX).&lt;/li&gt;
&lt;li&gt;Clear &lt;strong&gt;Installation/Setup Instructions&lt;/strong&gt; (How to clone, install dependencies, and run the project locally).&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Contributing Guide&lt;/strong&gt; (simple steps on how to submit a PR).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. ✨ Code Quality Guardian
&lt;/h4&gt;

&lt;p&gt;Help enforce a consistent coding style across the project's JavaScript/JSX files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set up Prettier&lt;/strong&gt; to handle code formatting automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up ESLint&lt;/strong&gt; with a modern configuration (e.g., Airbnb or Standard config) to catch common errors and ensure best practices.&lt;/li&gt;
&lt;li&gt;(Bonus) Add a &lt;code&gt;lint&lt;/code&gt; script to &lt;code&gt;package.json&lt;/code&gt; and fix any existing style issues across the codebase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. 🧪 First Feature Test
&lt;/h4&gt;

&lt;p&gt;The repository contains an &lt;code&gt;App_test.js&lt;/code&gt; file, suggesting the intent for testing exists.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Set up a Testing Framework&lt;/strong&gt; (e.g., Jest and React Testing Library).&lt;/li&gt;
&lt;li&gt;Write and successfully run a &lt;strong&gt;single unit test&lt;/strong&gt; for one of the existing components (e.g., &lt;code&gt;App.js&lt;/code&gt; or &lt;code&gt;Internal-dash-compo.jsx&lt;/code&gt;). This test should confirm that a component renders without crashing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;How to Participate:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Fork&lt;/strong&gt; the repository: &lt;code&gt;https://github.com/rushikesh648/Food-distribution-portal-&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Create a new branch&lt;/strong&gt; for your feature/fix.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Commit&lt;/strong&gt; your changes and make sure they meet the challenge criteria.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Submit a Pull Request (PR)&lt;/strong&gt; and mention the task you completed (e.g., "Feat: Add comprehensive README.md" or "Chore: Setup ESLint and Prettier").&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy Hacking!&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>App</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Thu, 09 Oct 2025 02:50:19 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/app-2k4b</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/app-2k4b</guid>
      <description>&lt;p&gt;The phrase "Auth0 post" is often interpreted as either an &lt;strong&gt;Auth0 Post-Login Action&lt;/strong&gt; (a piece of code) or a &lt;strong&gt;blog post&lt;/strong&gt; (content).&lt;/p&gt;

&lt;p&gt;Here are prompts for both:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Prompt for an Auth0 &lt;strong&gt;Post-Login Action (Code)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Automatic User Profile Enrichment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; Your application requires certain user metadata (like a custom &lt;code&gt;loyalty_tier&lt;/code&gt; or an internal &lt;code&gt;employee_id&lt;/code&gt;) to be present in the user's Auth0 profile before they can access a specific area of your app. This data is stored in an external company database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Write the JavaScript code for an Auth0 &lt;strong&gt;Post-Login Action&lt;/strong&gt; that performs the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; It checks if the user's current Auth0 profile (&lt;code&gt;user.app_metadata&lt;/code&gt;) contains a key called &lt;code&gt;is_data_synced&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; If &lt;code&gt;is_data_synced&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; present or is &lt;code&gt;false&lt;/code&gt;, it makes an asynchronous call (using &lt;code&gt;api.fetch&lt;/code&gt;) to a hypothetical external API endpoint (&lt;code&gt;https://api.internal-db.com/user-data?id=${user.user_id}&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Upon receiving a successful response from the external API, it updates the Auth0 user's &lt;code&gt;app_metadata&lt;/code&gt; to include the fetched data (e.g., &lt;code&gt;loyalty_tier: 'Gold'&lt;/code&gt;) and sets &lt;code&gt;is_data_synced&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; If the external API call fails, the Action should simply log an error but allow the login to proceed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Provide the complete &lt;code&gt;onExecutePostLogin&lt;/code&gt; function."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Prompt for an Auth0 &lt;strong&gt;Blog Post (Content)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Generating a technical article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Generate a detailed, step-by-step blog post titled: &lt;strong&gt;'The Power of POST: Securely Exchanging the Authorization Code for Tokens in Auth0.'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your post should cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; An introduction to why the token exchange must be a &lt;strong&gt;POST&lt;/strong&gt; request (server-side) instead of a &lt;strong&gt;GET&lt;/strong&gt; request.&lt;/li&gt;
&lt;li&gt; A clear explanation of the three critical parameters included in the POST request body (&lt;code&gt;grant_type&lt;/code&gt;, &lt;code&gt;client_id&lt;/code&gt;, &lt;code&gt;client_secret&lt;/code&gt;, and &lt;code&gt;code&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; The structure of the JSON response returned by the &lt;code&gt;/oauth/token&lt;/code&gt; endpoint (focusing on &lt;code&gt;id_token&lt;/code&gt; and &lt;code&gt;access_token&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; A concise code example (using Python or Node.js) demonstrating the server-side POST request."&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/" rel="noopener noreferrer"&gt;https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>auth0challenge</category>
    </item>
    <item>
      <title>App</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Wed, 08 Oct 2025 14:37:49 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/app-122k</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/app-122k</guid>
      <description>&lt;p&gt;The phrase "Auth0 post" is often interpreted as either an &lt;strong&gt;Auth0 Post-Login Action&lt;/strong&gt; (a piece of code) or a &lt;strong&gt;blog post&lt;/strong&gt; (content).&lt;/p&gt;

&lt;p&gt;Here are prompts for both:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Prompt for an Auth0 &lt;strong&gt;Post-Login Action (Code)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Automatic User Profile Enrichment&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; Your application requires certain user metadata (like a custom &lt;code&gt;loyalty_tier&lt;/code&gt; or an internal &lt;code&gt;employee_id&lt;/code&gt;) to be present in the user's Auth0 profile before they can access a specific area of your app. This data is stored in an external company database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Write the JavaScript code for an Auth0 &lt;strong&gt;Post-Login Action&lt;/strong&gt; that performs the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; It checks if the user's current Auth0 profile (&lt;code&gt;user.app_metadata&lt;/code&gt;) contains a key called &lt;code&gt;is_data_synced&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; If &lt;code&gt;is_data_synced&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; present or is &lt;code&gt;false&lt;/code&gt;, it makes an asynchronous call (using &lt;code&gt;api.fetch&lt;/code&gt;) to a hypothetical external API endpoint (&lt;code&gt;https://api.internal-db.com/user-data?id=${user.user_id}&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Upon receiving a successful response from the external API, it updates the Auth0 user's &lt;code&gt;app_metadata&lt;/code&gt; to include the fetched data (e.g., &lt;code&gt;loyalty_tier: 'Gold'&lt;/code&gt;) and sets &lt;code&gt;is_data_synced&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; If the external API call fails, the Action should simply log an error but allow the login to proceed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Provide the complete &lt;code&gt;onExecutePostLogin&lt;/code&gt; function."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Prompt for an Auth0 &lt;strong&gt;Blog Post (Content)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Generating a technical article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Generate a detailed, step-by-step blog post titled: &lt;strong&gt;'The Power of POST: Securely Exchanging the Authorization Code for Tokens in Auth0.'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your post should cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; An introduction to why the token exchange must be a &lt;strong&gt;POST&lt;/strong&gt; request (server-side) instead of a &lt;strong&gt;GET&lt;/strong&gt; request.&lt;/li&gt;
&lt;li&gt; A clear explanation of the three critical parameters included in the POST request body (&lt;code&gt;grant_type&lt;/code&gt;, &lt;code&gt;client_id&lt;/code&gt;, &lt;code&gt;client_secret&lt;/code&gt;, and &lt;code&gt;code&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; The structure of the JSON response returned by the &lt;code&gt;/oauth/token&lt;/code&gt; endpoint (focusing on &lt;code&gt;id_token&lt;/code&gt; and &lt;code&gt;access_token&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; A concise code example (using Python or Node.js) demonstrating the server-side POST request."&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/" rel="noopener noreferrer"&gt;https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>auth0challenge</category>
    </item>
    <item>
      <title>Hacktoberfest challenge prompt</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Wed, 01 Oct 2025 10:34:17 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/hacktoberfest-challenge-prompt-53go</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/hacktoberfest-challenge-prompt-53go</guid>
      <description>&lt;p&gt;🎃 Hacktoberfest Prompt for story-generator- 📖&lt;br&gt;
Project: Interactive Story Generator&lt;br&gt;
Repository: rushikesh648/story-generator-&lt;br&gt;
            &lt;a href="https://github.com/rushikesh648/story-generator-" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/story-generator-&lt;/a&gt;&lt;br&gt;
Technology Focus: HTML, CSS, JavaScript (Front-end)&lt;/p&gt;

&lt;p&gt;Join us in building a simple, web-based tool that generates short stories based on user input (like names, places, or themes). This project is perfect for beginners looking to make their first contribution!&lt;/p&gt;

&lt;p&gt;Beginner-Friendly Contribution Ideas (Pick one!):&lt;br&gt;
Contribution Area   Task Description&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Documentation (Easy) Create a proper README.md file. Write a clear description of what the Story Generator is, how to run it locally, and what future features are planned.&lt;/li&gt;
&lt;li&gt;Core Logic (Intermediate)    Implement the basic story generation function in JavaScript. Take input fields (e.g., "A character's name," "A setting") from app.html and use them to construct and display a pre-defined story template.&lt;/li&gt;
&lt;li&gt;Styling/UI (Easy)    Apply basic CSS to style app.html. Improve the appearance, typography, and layout of the input fields and the story output area. (Consider using a CSS framework like Bootstrap or Tailwind if you know it!)&lt;/li&gt;
&lt;li&gt;Contribution Guide (Easy)    Add a CONTRIBUTING.md file. Define clear steps for others to fork, clone, and submit Pull Requests to the repository. This is crucial for Hacktoberfest success!&lt;/li&gt;
&lt;li&gt;Feature Enhancement (Intermediate)   Add form validation to the input fields. Use JavaScript to ensure that all required story prompts are filled out before the "Generate Story" button can be clicked.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Export to Sheets&lt;br&gt;
Remember to tag your Pull Requests with the Hacktoberfest label (if the repository maintainer has set it up) or mention "Ready for Hacktoberfest" in the PR description.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>webdev</category>
      <category>devchallenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Auth0</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sun, 28 Sep 2025 12:16:38 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/auth0-5ai3</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/auth0-5ai3</guid>
      <description>&lt;p&gt;&lt;a href="https://dev-6o0q0tiftwznko4f.us.auth0.com/u/login?state=hKFo2SA0WWZkU3ZvRVpqTGt4aTVTUjVoZTNlUlotS0pLeHZiQ6Fur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEFvTU1SV3ByckNWaEIxTTN4WG4tbTlfalNpd3E5bDZ5o2NpZNkgTXowbkZFYmJKYzdHenI5TGVGVUFybzRoMFZ2dzR2TlY" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-6o0q0tiftwznko4f.us.auth0.com/wsfed/eEN9PXhy1O9BVZPlMhSEVvyDjZMxX7w5" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-6o0q0tiftwznko4f.us.auth0.com/api/v2/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/" rel="noopener noreferrer"&gt;https://app-directory-ci8cmyiw9-rushikeshs-projects-fe215f6d.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>auth0challenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Packagist</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sat, 27 Sep 2025 06:30:06 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/packagist-3p6</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/packagist-3p6</guid>
      <description>&lt;h1&gt;
  
  
  Packagist API
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/KnpLabs/packagist-api/actions/workflows/test.yml/badge.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://github.com/KnpLabs/packagist-api/actions/workflows/test.yml/badge.svg" alt="Build status" width="169" height="20"&gt;&lt;/a&gt; &lt;a href="https://packagist.org/packages/KnpLabs/packagist-api" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fposer.pugx.org%2FKnpLabs%2Fpackagist-api%2Fv%2Fstable.png" alt="Latest Stable Version" width="90" height="20"&gt;&lt;/a&gt; &lt;a href="https://packagist.org/packages/KnpLabs/packagist-api" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fposer.pugx.org%2FKnpLabs%2Fpackagist-api%2Fdownloads.png" alt="Total Downloads" width="133" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple object oriented wrapper for Packagist API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PHP ^7.4 or ^8.0 (for PHP 7.1-7.3 please use the 1.x release line)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;The recommended way to install Packagist API is through composer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require knplabs/packagist-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Search for packages:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Packagist\Api\Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sylius'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Outputs:&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sylius&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;flow&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sales&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;shipping&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;taxation&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;money&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;assortment&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;addressing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;payments&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;taxonomies&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;inventory&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;promotions&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  You can limit results to a desired amount of pages:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sylius'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// get first 2 pages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Get package details:
&lt;/h4&gt;

&lt;p&gt;Gets full package details, generated dynamically by the Packagist API.&lt;br&gt;
Consider using getComposer()&lt;br&gt;
instead to use the Packagist API more efficiently if you don't need all&lt;br&gt;
the full metadata for a package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$package&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sylius/sylius'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Package %s. %s.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;$package&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nv"&gt;$package&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getDescription&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Outputs:&lt;/span&gt;
&lt;span class="nc"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nc"&gt;Modern&lt;/span&gt; &lt;span class="n"&gt;ecommerce&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nc"&gt;Symfony2&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Get composer details: {#get-composer-details}
&lt;/h4&gt;

&lt;p&gt;Similar to &lt;code&gt;get()&lt;/code&gt;, but uses Composer metadata which is Packagist's preferred&lt;br&gt;
way of retrieving details, since responses are cached efficiently as static files&lt;br&gt;
by the Packagist service. The response lacks some metadata that is provided&lt;br&gt;
by &lt;code&gt;get()&lt;/code&gt;, see &lt;a href="https://packagist.org/apidoc" rel="noopener noreferrer"&gt;Packagist API documentation&lt;/a&gt;&lt;br&gt;
for details. Returns multiple packages, you need to select the requested&lt;br&gt;
one from the indexed array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$packages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getComposer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sylius/sylius'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$package&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$packages&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'sylius/sylius'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nv"&gt;$versions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$package&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getVersions&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nb"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s1"&gt;'Package %s. %s.'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;$versions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="nv"&gt;$versions&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getDescription&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Outputs:&lt;/span&gt;
&lt;span class="nc"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sylius&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nc"&gt;Modern&lt;/span&gt; &lt;span class="n"&gt;ecommerce&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nc"&gt;Symfony2&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  List all packages:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$package&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$package&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Outputs:&lt;/span&gt;
&lt;span class="n"&gt;abhinavsingh&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jaxl&lt;/span&gt;
&lt;span class="n"&gt;abishekrsrikaanth&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;fuel&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;util&lt;/span&gt;
&lt;span class="n"&gt;abmundi&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;commands&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;bundle&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  They can be filtered by type or vendor:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'library'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vendor'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'sylius'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Custom Packagist repositories
&lt;/h4&gt;

&lt;p&gt;You can also set a custom Packagist repository URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setPackagistUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://custom.packagist.site.org'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Errors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Packagist\Api\PackageNotFoundException&lt;/code&gt; will be thrown when the Packagist API returns a 404 response.&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;\InvalidArgumentException&lt;/code&gt; will be thrown when the response from Packagist was not able to be parsed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;packagist-api&lt;/code&gt; is licensed under the MIT License - see the LICENSE file for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maintainers
&lt;/h2&gt;

&lt;p&gt;KNPLabs is looking for maintainers (&lt;a href="https://knplabs.com/en/blog/news-for-our-foss-projects-maintenance" rel="noopener noreferrer"&gt;see why&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;If you are interested, feel free to open a PR to ask to be added as a maintainer.&lt;/p&gt;

&lt;p&gt;We’ll be glad to hear from you :)&lt;/p&gt;

&lt;p&gt;This library is maintained by the following people (alphabetically sorted) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/robbieaverill"&gt;@robbieaverill&lt;/a&gt;
GitHub link:&lt;a href="https://github.com/rushikesh648/packagist-api" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/packagist-api&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>Repo</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Fri, 26 Sep 2025 16:25:43 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/repo-196m</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/repo-196m</guid>
      <description>&lt;h1&gt;
  
  
  MarkItDown
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://pypi.org/project/markitdown/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fpypi%2Fv%2Fmarkitdown.svg" alt="PyPI" width="78" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fpypi%2Fdd%2Fmarkitdown" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fpypi%2Fdd%2Fmarkitdown" alt="PyPI - Downloads" width="124" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FBuilt%2520by-AutoGen%2520Team-blue" alt="Built by AutoGen Team" width="146" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
MarkItDown now offers an MCP (Model Context Protocol) server for integration with LLM applications like Claude Desktop. See &lt;a href="https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp" rel="noopener noreferrer"&gt;markitdown-mcp&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;[!IMPORTANT]&lt;br&gt;
Breaking changes between 0.0.1 to 0.1.0:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependencies are now organized into optional feature-groups (further details below). Use &lt;code&gt;pip install 'markitdown[all]'&lt;/code&gt; to have backward-compatible behavior. &lt;/li&gt;
&lt;li&gt;convert_stream() now requires a binary file-like object (e.g., a file opened in binary mode, or an io.BytesIO object). This is a breaking change from the previous version, where it previously also accepted text file-like objects, like io.StringIO.&lt;/li&gt;
&lt;li&gt;The DocumentConverter class interface has changed to read from file-like streams rather than file paths. &lt;em&gt;No temporary files are created anymore&lt;/em&gt;. If you are the maintainer of a plugin, or custom DocumentConverter, you likely need to update your code. Otherwise, if only using the MarkItDown class or CLI (as in these examples), you should not need to change anything.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;MarkItDown is a lightweight Python utility for converting various files to Markdown for use with LLMs and related text analysis pipelines. To this end, it is most comparable to &lt;a href="https://github.com/deanmalmgren/textract" rel="noopener noreferrer"&gt;textract&lt;/a&gt;, but with a focus on preserving important document structure and content as Markdown (including: headings, lists, tables, links, etc.) While the output is often reasonably presentable and human-friendly, it is meant to be consumed by text analysis tools -- and may not be the best option for high-fidelity document conversions for human consumption.&lt;/p&gt;

&lt;p&gt;MarkItDown currently supports the conversion from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;PowerPoint&lt;/li&gt;
&lt;li&gt;Word&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;Images (EXIF metadata and OCR)&lt;/li&gt;
&lt;li&gt;Audio (EXIF metadata and speech transcription)&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;Text-based formats (CSV, JSON, XML)&lt;/li&gt;
&lt;li&gt;ZIP files (iterates over contents)&lt;/li&gt;
&lt;li&gt;Youtube URLs&lt;/li&gt;
&lt;li&gt;EPubs&lt;/li&gt;
&lt;li&gt;... and more!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Markdown?
&lt;/h2&gt;

&lt;p&gt;Markdown is extremely close to plain text, with minimal markup or formatting, but still&lt;br&gt;
provides a way to represent important document structure. Mainstream LLMs, such as&lt;br&gt;
OpenAI's GPT-4o, natively "&lt;em&gt;speak&lt;/em&gt;" Markdown, and often incorporate Markdown into their&lt;br&gt;
responses unprompted. This suggests that they have been trained on vast amounts of&lt;br&gt;
Markdown-formatted text, and understand it well. As a side benefit, Markdown conventions&lt;br&gt;
are also highly token-efficient.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;MarkItDown requires Python 3.10 or higher. It is recommended to use a virtual environment to avoid dependency conflicts.&lt;/p&gt;

&lt;p&gt;With the standard Python installation, you can create and activate a virtual environment using the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If using &lt;code&gt;uv&lt;/code&gt;, you can create a virtual environment with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv venv &lt;span class="nt"&gt;--python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.12 .venv
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;span class="c"&gt;# NOTE: Be sure to use 'uv pip install' rather than just 'pip install' to install packages in this virtual environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Anaconda, you can create a virtual environment with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda create &lt;span class="nt"&gt;-n&lt;/span&gt; markitdown &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.12
conda activate markitdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;To install MarkItDown, use pip: &lt;code&gt;pip install 'markitdown[all]'&lt;/code&gt;. Alternatively, you can install it from the source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:microsoft/markitdown.git
&lt;span class="nb"&gt;cd &lt;/span&gt;markitdown
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'packages/markitdown[all]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command-Line
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;markitdown path-to-file.pdf &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; document.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use &lt;code&gt;-o&lt;/code&gt; to specify the output file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;markitdown path-to-file.pdf &lt;span class="nt"&gt;-o&lt;/span&gt; document.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also pipe content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;path-to-file.pdf | markitdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Optional Dependencies
&lt;/h3&gt;

&lt;p&gt;MarkItDown has optional dependencies for activating various file formats. Earlier in this document, we installed all optional dependencies with the &lt;code&gt;[all]&lt;/code&gt; option. However, you can also install them individually for more control. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s1"&gt;'markitdown[pdf, docx, pptx]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;will install only the dependencies for PDF, DOCX, and PPTX files.&lt;/p&gt;

&lt;p&gt;At the moment, the following optional dependencies are available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;[all]&lt;/code&gt; Installs all optional dependencies&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[pptx]&lt;/code&gt; Installs dependencies for PowerPoint files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[docx]&lt;/code&gt; Installs dependencies for Word files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[xlsx]&lt;/code&gt; Installs dependencies for Excel files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[xls]&lt;/code&gt; Installs dependencies for older Excel files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[pdf]&lt;/code&gt; Installs dependencies for PDF files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[outlook]&lt;/code&gt; Installs dependencies for Outlook messages&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[az-doc-intel]&lt;/code&gt; Installs dependencies for Azure Document Intelligence&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[audio-transcription]&lt;/code&gt; Installs dependencies for audio transcription of wav and mp3 files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[youtube-transcription]&lt;/code&gt; Installs dependencies for fetching YouTube video transcription&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;MarkItDown also supports 3rd-party plugins. Plugins are disabled by default. To list installed plugins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;markitdown &lt;span class="nt"&gt;--list-plugins&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To enable plugins use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;markitdown &lt;span class="nt"&gt;--use-plugins&lt;/span&gt; path-to-file.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To find available plugins, search GitHub for the hashtag &lt;code&gt;#markitdown-plugin&lt;/code&gt;. To develop a plugin, see &lt;code&gt;packages/markitdown-sample-plugin&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Document Intelligence
&lt;/h3&gt;

&lt;p&gt;To use Microsoft Document Intelligence for conversion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;markitdown path-to-file.pdf &lt;span class="nt"&gt;-o&lt;/span&gt; document.md &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;document_intelligence_endpoint&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More information about how to set up an Azure Document Intelligence Resource can be found &lt;a href="https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/how-to-guides/create-document-intelligence-resource?view=doc-intel-4.0.0" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Python API
&lt;/h3&gt;

&lt;p&gt;Basic usage in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;markitdown&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MarkItDown&lt;/span&gt;

&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MarkItDown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enable_plugins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Set to True to enable plugins
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test.xlsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Document Intelligence conversion in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;markitdown&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MarkItDown&lt;/span&gt;

&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MarkItDown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;docintel_endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;document_intelligence_endpoint&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;test.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To use Large Language Models for image descriptions (currently only for pptx and image files), provide &lt;code&gt;llm_client&lt;/code&gt; and &lt;code&gt;llm_model&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;markitdown&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MarkItDown&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;md&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MarkItDown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm_client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;optional custom prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;example.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; markitdown:latest &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; markitdown:latest &amp;lt; ~/your-file.pdf &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; output.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;This project welcomes contributions and suggestions. Most contributions require you to agree to a&lt;br&gt;
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us&lt;br&gt;
the rights to use your contribution. For details, visit &lt;a href="https://cla.opensource.microsoft.com" rel="noopener noreferrer"&gt;https://cla.opensource.microsoft.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When you submit a pull request, a CLA bot will automatically determine whether you need to provide&lt;br&gt;
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions&lt;br&gt;
provided by the bot. You will only need to do this once across all repos using our CLA.&lt;/p&gt;

&lt;p&gt;This project has adopted the &lt;a href="https://opensource.microsoft.com/codeofconduct/" rel="noopener noreferrer"&gt;Microsoft Open Source Code of Conduct&lt;/a&gt;.&lt;br&gt;
For more information see the &lt;a href="https://opensource.microsoft.com/codeofconduct/faq/" rel="noopener noreferrer"&gt;Code of Conduct FAQ&lt;/a&gt; or&lt;br&gt;
contact &lt;a href="//mailto:opencode@microsoft.com"&gt;opencode@microsoft.com&lt;/a&gt; with any additional questions or comments.&lt;/p&gt;
&lt;h3&gt;
  
  
  How to Contribute
&lt;/h3&gt;

&lt;p&gt;You can help by looking at issues or helping review PRs. Any issue or PR is welcome, but we have also marked some as 'open for contribution' and 'open for reviewing' to help facilitate community contributions. These are of course just suggestions and you are welcome to contribute in any way you like.&lt;/p&gt;



|            | All                                                          | Especially Needs Help from Community                                                                                                      |
| ---------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Issues** | [All Issues](https://github.com/microsoft/markitdown/issues) | [Issues open for contribution](https://github.com/microsoft/markitdown/issues?q=is%3Aissue+is%3Aopen+label%3A%22open+for+contribution%22) |
| **PRs**    | [All PRs](https://github.com/microsoft/markitdown/pulls)     | [PRs open for reviewing](https://github.com/microsoft/markitdown/pulls?q=is%3Apr+is%3Aopen+label%3A%22open+for+reviewing%22)              |


&lt;h3&gt;
  
  
  Running Tests and Checks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the MarkItDown package:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;cd &lt;/span&gt;packages/markitdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;hatch&lt;/code&gt; in your environment and run tests:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  pip &lt;span class="nb"&gt;install &lt;/span&gt;hatch  &lt;span class="c"&gt;# Other ways of installing hatch: https://hatch.pypa.io/dev/install/&lt;/span&gt;
  hatch shell
  hatch &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;(Alternative) Use the Devcontainer which has all the dependencies installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# Reopen the project in Devcontainer and run:&lt;/span&gt;
  hatch &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Run pre-commit checks before submitting a PR: &lt;code&gt;pre-commit run --all-files&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contributing 3rd-party Plugins
&lt;/h3&gt;

&lt;p&gt;You can also contribute by creating and sharing 3rd party plugins. See &lt;code&gt;packages/markitdown-sample-plugin&lt;/code&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trademarks
&lt;/h2&gt;

&lt;p&gt;This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft&lt;br&gt;
trademarks or logos is subject to and must follow&lt;br&gt;
&lt;a href="https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general" rel="noopener noreferrer"&gt;Microsoft's Trademark &amp;amp; Brand Guidelines&lt;/a&gt;.&lt;br&gt;
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.&lt;br&gt;
Any use of third-party trademarks or logos are subject to those third-party's policies.&lt;br&gt;
Within link:&lt;br&gt;
&lt;a href="https://github.com/rushikesh648/markitdown" rel="noopener noreferrer"&gt;https://github.com/rushikesh648/markitdown&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Microsoft Open Source Code of Conduct
&lt;/h1&gt;

&lt;p&gt;This project has adopted the &lt;a href="https://opensource.microsoft.com/codeofconduct/" rel="noopener noreferrer"&gt;Microsoft Open Source Code of Conduct&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opensource.microsoft.com/codeofconduct/" rel="noopener noreferrer"&gt;Microsoft Open Source Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.microsoft.com/codeofconduct/faq/" rel="noopener noreferrer"&gt;Microsoft Code of Conduct FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Contact &lt;a href="//mailto:opencode@microsoft.com"&gt;opencode@microsoft.com&lt;/a&gt; with questions or concerns&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hacktoberfest</category>
      <category>devops</category>
    </item>
    <item>
      <title>Latest health-ui</title>
      <dc:creator>Rushikesh Pundkar</dc:creator>
      <pubDate>Sun, 21 Sep 2025 15:07:13 +0000</pubDate>
      <link>https://dev.to/rushikesh_pundkar_913318c/latest-health-ui-13p1</link>
      <guid>https://dev.to/rushikesh_pundkar_913318c/latest-health-ui-13p1</guid>
      <description>&lt;p&gt;&lt;a href="https://cautious-winner-9wvvr4wwqx429979.github.dev/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kendoreactchallenge</category>
    </item>
  </channel>
</rss>
