github.com Open in urlscan Pro
140.82.121.4  Public Scan

Submitted URL: http://podofo.sf.net/
Effective URL: https://github.com/podofo/podofo
Submission: On December 13 via api from UA — Scanned from PL

Form analysis 3 forms found in the DOM

GET

<form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get">
  <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder" data-min-width="300" data-catalyst="">
    <div class="FormControl FormControl--fullWidth">
      <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label>
      <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput">
        <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap">
          <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual">
            <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path>
          </svg>
        </span>
        <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer">
          <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent"></div>
          <div class="QueryBuilder-InputWrapper">
            <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"><span></span></div>
            <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-d65a4922-1e6c-4cf5-8c57-d975ff977e7f"
              data-target="query-builder.input" data-action="
          input:query-builder#inputChange
          blur:query-builder#inputBlur
          keydown:query-builder#inputKeydown
          focus:query-builder#inputFocus
        " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" aria-controls="query-builder-test-results" aria-autocomplete="list" aria-haspopup="listbox" style="width: 300px;">
          </div>
        </div>
        <span class="sr-only" id="query-builder-test-clear">Clear</span>
        <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action="
                click:query-builder#clear
                focus:query-builder#clearButtonFocus
                blur:query-builder#clearButtonBlur
              " variant="small" hidden="" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16"
            viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual">
            <path
              d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z">
            </path>
          </svg>
        </button>
      </div>
      <template id="search-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search">
          <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path>
        </svg>
      </template>
      <template id="code-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
          <path
            d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z">
          </path>
        </svg>
      </template>
      <template id="file-code-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code">
          <path
            d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z">
          </path>
        </svg>
      </template>
      <template id="history-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history">
          <path
            d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z">
          </path>
        </svg>
      </template>
      <template id="repo-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo">
          <path
            d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z">
          </path>
        </svg>
      </template>
      <template id="bookmark-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark">
          <path
            d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z">
          </path>
        </svg>
      </template>
      <template id="plus-circle-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle">
          <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path>
        </svg>
      </template>
      <template id="circle-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill">
          <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path>
        </svg>
      </template>
      <template id="trash-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash">
          <path
            d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z">
          </path>
        </svg>
      </template>
      <template id="team-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people">
          <path
            d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z">
          </path>
        </svg>
      </template>
      <template id="project-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project">
          <path
            d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z">
          </path>
        </svg>
      </template>
      <template id="pencil-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil">
          <path
            d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z">
          </path>
        </svg>
      </template>
      <template id="copilot-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot">
          <path
            d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z">
          </path>
          <path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path>
        </svg>
      </template>
      <template id="copilot-error-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error">
          <path
            d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z">
          </path>
        </svg>
      </template>
      <template id="workflow-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow">
          <path
            d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z">
          </path>
        </svg>
      </template>
      <template id="book-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book">
          <path
            d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z">
          </path>
        </svg>
      </template>
      <template id="code-review-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review">
          <path
            d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z">
          </path>
        </svg>
      </template>
      <template id="codespaces-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces">
          <path
            d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z">
          </path>
          <path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path>
        </svg>
      </template>
      <template id="comment-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment">
          <path
            d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z">
          </path>
        </svg>
      </template>
      <template id="comment-discussion-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion">
          <path
            d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z">
          </path>
        </svg>
      </template>
      <template id="organization-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization">
          <path
            d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z">
          </path>
        </svg>
      </template>
      <template id="rocket-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket">
          <path
            d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z">
          </path>
        </svg>
      </template>
      <template id="shield-check-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check">
          <path
            d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z">
          </path>
        </svg>
      </template>
      <template id="heart-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart">
          <path
            d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z">
          </path>
        </svg>
      </template>
      <template id="server-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server">
          <path
            d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z">
          </path>
        </svg>
      </template>
      <template id="globe-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe">
          <path
            d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z">
          </path>
        </svg>
      </template>
      <template id="issue-opened-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened">
          <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
          <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>
        </svg>
      </template>
      <template id="device-mobile-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile">
          <path
            d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z">
          </path>
        </svg>
      </template>
      <template id="package-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package">
          <path
            d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z">
          </path>
        </svg>
      </template>
      <template id="credit-card-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card">
          <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path>
          <path
            d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z">
          </path>
        </svg>
      </template>
      <template id="play-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
          <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
        </svg>
      </template>
      <template id="gift-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift">
          <path
            d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z">
          </path>
        </svg>
      </template>
      <template id="code-square-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square">
          <path
            d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z">
          </path>
        </svg>
      </template>
      <template id="device-desktop-icon">
        <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop">
          <path
            d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z">
          </path>
        </svg>
      </template>
      <div class="position-relative">
        <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action="
                    combobox-commit:query-builder#comboboxCommit
                    mousedown:query-builder#resultsMousedown
                  " data-target="query-builder.resultsList" data-persist-list="false" id="query-builder-test-results"></ul>
      </div>
      <div class="FormControl-inlineValidation" id="validation-d65a4922-1e6c-4cf5-8c57-d975ff977e7f" hidden="hidden">
        <span class="FormControl-inlineValidation--visual">
          <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill">
            <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path>
          </svg>
        </span>
        <span></span>
      </div>
    </div>
    <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div>
  </query-builder>
</form>

POST /search/feedback

<form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token"
    value="nFNwYP1f2m5byZ3FqGju6Kb+GAPHAu5OzOiucXhmh4LOCm2dfPiZyx7nW73zR9cRi3KBFR281rzjZPglZ05AaA==">
  <p>We read every piece of feedback, and take your input very seriously.</p>
  <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea>
  <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox">
  <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label>
</form>

POST /search/custom_scopes

<form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token"
    value="1SWaVQNhPYcCT9EpKzVBE/YYbEva+Mx9shkqjFOjjaeFQVAENqgLGq7PXcC1L32xLkkzhP/omDbDr6chNOprLg==">
  <div data-target="custom-scopes.customScopesModalDialogFlash"></div>
  <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField">
  <div class="form-group">
    <label for="custom_scope_name">Name</label>
    <auto-check src="/search/custom_scopes/check_name" required="">
      <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required="" maxlength="50" spellcheck="false">
      <input type="hidden" data-csrf="true" value="JQW12xP5xYCuxsuJXYhQkYXG4EcR9lonXmvElWEBD+KkoOTORtmRrN7ikCCtzU0uxdNZEzZ1ZI+BGcPzSaxAlQ==">
    </auto-check>
  </div>
  <div class="form-group">
    <label for="custom_scope_query">Query</label>
    <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required=""
      maxlength="500">
  </div>
  <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p>
</form>

Text Content

Skip to content



NAVIGATION MENU

Toggle navigation
Sign in
 * Product
    * GitHub Copilot
      Write better code with AI
    * Security
      Find and fix vulnerabilities
    * Actions
      Automate any workflow
    * Codespaces
      Instant dev environments
    * Issues
      Plan and track work
    * Code Review
      Manage code changes
    * Discussions
      Collaborate outside of code
    * Code Search
      Find more, search less
   
   Explore
    * All features
    * Documentation
    * GitHub Skills
    * Blog

 * Solutions
   By company size
    * Enterprises
    * Small and medium teams
    * Startups
   
   By use case
    * DevSecOps
    * DevOps
    * CI/CD
    * View all use cases
   
   By industry
    * Healthcare
    * Financial services
    * Manufacturing
    * Government
    * View all industries
   
   View all solutions
 * Resources
   Topics
    * AI
    * DevOps
    * Security
    * Software Development
    * View all
   
   Explore
    * Learning Pathways
    * White papers, Ebooks, Webinars
    * Customer Stories
    * Partners
    * Executive Insights

 * Open Source
    * GitHub Sponsors
      Fund open source developers
   
    * The ReadME Project
      GitHub community articles
   
   Repositories
    * Topics
    * Trending
    * Collections

 * Enterprise
    * Enterprise platform
      AI-powered developer platform
   
   Available add-ons
    * Advanced Security
      Enterprise-grade security features
    * GitHub Copilot
      Enterprise-grade AI features
    * Premium Support
      Enterprise-grade 24/7 support

 * Pricing


Search or jump to...



SEARCH CODE, REPOSITORIES, USERS, ISSUES, PULL REQUESTS...

Search

Clear



Search syntax tips




PROVIDE FEEDBACK



We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted
Cancel Submit feedback


SAVED SEARCHES


USE SAVED SEARCHES TO FILTER YOUR RESULTS MORE QUICKLY


Name
Query

To see all available qualifiers, see our documentation.


Cancel Create saved search
Sign in
Sign up Reseting focus
You signed in with another tab or window. Reload to refresh your session. You
signed out in another tab or window. Reload to refresh your session. You
switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert

{{ message }}
podofo / podofo Public
 * Notifications You must be signed in to change notification settings
 * Fork 81
 * Star 394

A C++17 PDF manipulation library

podofo.github.io/podofo/documentation


LICENSE

View license
394 stars 81 forks Branches Tags Activity
Star
Notifications You must be signed in to change notification settings
 * Code
 * Issues 19
 * Pull requests 1
 * Actions
 * Wiki
 * Security
 * Insights

Additional navigation options
 * Code
 * Issues
 * Pull requests
 * Actions
 * Wiki
 * Security
 * Insights


PODOFO/PODOFO

 master
4 Branches32 Tags

Go to file


Code



FOLDERS AND FILES

NameName
Last commit message
Last commit date


LATEST COMMIT

ceztko
PdfFont: Try to re-use same prefix when substituting the font
Dec 11, 2024
5235bf5 · Dec 11, 2024


HISTORY

2,452 Commits


.github
.github
Try fix build-mac workflow
Oct 15, 2024
3rdparty
3rdparty
Unconditionally build podofo_private/podofo_3rdparty with -fPIC on no…
Nov 26, 2024
cmake/modules
cmake/modules
Added stub little-cms2 integration
Nov 7, 2024
examples
examples
helloworld: Remove inadvertedly committed code
Dec 8, 2024
extern
extern
Add TestEmbedFont testing PdfFont::TryCreateSubstituteFont test
Dec 1, 2024
man
man
Install man pages in directory from GNUInstallDirs
Dec 22, 2023
playground
playground
Added stub little-cms2 integration
Nov 7, 2024
src/podofo
src/podofo
PdfFont: Try to re-use same prefix when substituting the font
Dec 11, 2024
staging
staging
Introduced CodePointSpan and use it in the API when fetching code points
Oct 8, 2024
test
test
Removed temporary Matrix2D
Dec 11, 2024
tools
tools
PdfPage: GetResources() Now it returns a reference instead
Dec 9, 2024
.editorconfig
.editorconfig
pdfmm renamed back to PoDoFo
Jan 6, 2023
.gitattributes
.gitattributes
pdfmm renamed back to PoDoFo
Jan 6, 2023
.gitignore
.gitignore
Filter ._* from globbed source files
Jun 27, 2024
.gitmodules
.gitmodules
pdfmm renamed back to PoDoFo
Jan 6, 2023
API-MIGRATION.md
API-MIGRATION.md
Removed temporary Matrix2D
Dec 11, 2024
AUTHORS.md
AUTHORS.md
fix a few typos, dos2unix
Feb 13, 2023
CHANGELOG.md
CHANGELOG.md
Added missing 0.10.4 changelog
Oct 31, 2024
CMakeLists.txt
CMakeLists.txt
Move 3rdparty code compilation to separate library
Nov 15, 2024
CODING-STYLE.md
CODING-STYLE.md
Use operator ""_n everywhere in the code
Aug 18, 2024
COPYING
COPYING
pdfmm renamed back to PoDoFo
Jan 6, 2023
Doxyfile.in
Doxyfile.in
Add a -dev suffix when building the documentation with CMAKE_BUILD_TY…
Dec 21, 2023
README.md
README.md
Update README.md
Aug 27, 2024
SOURCE-LAYOUT.md
SOURCE-LAYOUT.md
Added PdfNames.h to optional headers, moved Convert.h to optional/Pdf…
Aug 21, 2024
TODO.md
TODO.md
PdfFontMetrics: Cleaned the API, removed spurious methods. Added GeFo…
Dec 2, 2024
cmake_uninstall.cmake.in
cmake_uninstall.cmake.in
pdfmm renamed back to PoDoFo
Jan 6, 2023
conanfile.txt
conanfile.txt
Use CMake targets instead of handy setting include directories.
Jan 26, 2023
View all files


REPOSITORY FILES NAVIGATION

 * README
 * License


PODOFO

 1.  What is PoDoFo?
 2.  Requirements
 3.  Licensing
 4.  Development quickstart
 5.  Doxygen Documentation
 6.  String encoding and buffer conventions
 7.  API Stability
 8.  PoDoFo tools
 9.  TODO
 10. FAQ
 11. No warranty
 12. Contributions
 13. Authors


WHAT IS PODOFO?

PoDoFo is a free portable C++ library to work with the PDF file format.

PoDoFo provides classes to parse a PDF file and modify its content into memory.
The changes can be written back to disk easily. Besides PDF parsing PoDoFo also
provides facilities to create your own PDF files from scratch. It currently does
not support rendering PDF content.


REQUIREMENTS

To build PoDoFo lib you'll need a c++17 compiler, CMake 3.16 and the following
libraries (tentative minimum versions indicated):

 * freetype2 (2.11)
 * fontconfig (2.13.94, required for Unix platforms, optional for Windows)
 * OpenSSL (1.1 and 3.0 are supported)
 * LibXml2 (2.9.12)
 * zlib
 * libjpeg (9d, optional)
 * libtiff (4.0.10, optional)
 * libpng (1.6.37, optional)
 * libidn (1.38, optional)

For the most popular toolchains, PoDoFo requires the following minimum versions:

 * msvc++ 14.16 (VS 2017 15.9)
 * gcc 9.0
 * clang/llvm 7.0

It is regularly tested with the following IDE/toolchains versions:

 * Visual Studio 2017 15.9
 * Visual Studio 2019 16.11
 * Visual Studio 2022 17.3
 * gcc 9.3.1
 * XCode 13.3
 * NDK r23b

GCC 8.x support broke recently, but it could be reinstanced.


LICENSING

PoDoFo library is licensed under the LGPL 2.0 or later terms. PoDoFo tools are
licensed under the GPL 2.0 or later terms.


DEVELOPMENT QUICKSTART

PoDoFo is known to compile through a multitude of package managers (including
apt-get, brew, vcpkg, Conan), and has public continuous integration working in
Ubuntu Linux, MacOS and Windows, bootstrapping the CMake project, building and
testing the library. It's highly recommended to build PoDoFo using such package
managers.

There's also a playground area in the repository where you can have access to
pre-build dependencies for some popular architectures/operating systems: the
playground is the recommended setting to develop the library and reproduce bugs,
while it's not recommended for the deployment of your application using PoDoFo.
Have a look to the Readme there.

> Warning: PoDoFo is known to be working in cross-compilation toolchains (eg.
> Android/iOS development), but support may not provided in such scenarios. If
> you decide to manually build dependencies you are assumed to know how to
> identity possible library clashes/mismatches and how to deal with
> compilation/linking problems that can arise in your system.


BUILD WITH APT-GET

From the source root run:

sudo apt-get install -y libfontconfig1-dev libfreetype-dev libxml2-dev libssl-dev libjpeg-dev libpng-dev libtiff-dev libidn11-dev
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug





BUILD WITH BREW

Install brew, then from the source root run:

brew install fontconfig freetype openssl libxml2 jpeg-turbo libpng libtiff libidn cmake
mkdir build
cd build
cmake  -DCMAKE_BUILD_TYPE=Debug -DCMAKE_FIND_FRAMEWORK=NEVER -DCMAKE_PREFIX_PATH=`brew --prefix` -DFontconfig_INCLUDE_DIR=`brew --prefix fontconfig`/include -DOPENSSL_ROOT_DIR=`brew --prefix openssl@3` ..
cmake --build . --config Debug





BUILD WITH CONAN

Install conan, then from source root run:

mkdir build
cd build
conan install ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug





BUILD WITH VCPKG

Follow the vcpkg quickstart guide to setup the package manager repository first.
In Windows, it may be also useful to set the environment variable
VCPKG_DEFAULT_TRIPLET to x64-windows to default installing 64 bit dependencies
and define a VCPKG_INSTALLATION_ROOT variable with the location of the
repository as created in the quickstart.

Then from source root run:

vcpkg install fontconfig freetype libxml2 openssl libjpeg-turbo libpng tiff zlib
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake --build . --config Debug





CMAKE SWITCHES

 * PODOFO_BUILD_TEST: Build the unit tests, defaults to TRUE;

 * PODOFO_BUILD_EXAMPLES: Build the examples, defaults to TRUE;

 * PODOFO_BUILD_UNSUPPORTED_TOOLS: Build the PoDoFo tools, defaults to FALSE.
   See the relevant section in the Readme;

 * PODOFO_BUILD_LIB_ONLY: If TRUE, it will build only the library component.
   This unconditionally disable building tests, examples and tools;

 * PODOFO_BUILD_STATIC: If TRUE, build the library as a static object and use it
   in tests, examples and tools. By default a shared library is built.


STATIC LINKING

If you want to use a static build of PoDoFo and you are including the PoDoFo
cmake project it's very simple. Do something like the following in your CMake
project:

set(PODOFO_BUILD_LIB_ONLY TRUE CACHE BOOL "" FORCE)
set(PODOFO_BUILD_STATIC TRUE CACHE BOOL "" FORCE)
add_subdirectory(podofo)
# ...
target_link_libraries(MyTarget podofo::podofo)




If you are linking against a precompiled static build of PoDoFo this is a
scenario where the support is limited, as you are really supposed to be able to
identify and fix linking errors. The general steps are:

 * Add PODOFO_STATIC compilation definition to your project, or before including
   podofo.h;
 * Link the libraries podofo.a, podofo_private.a (or podofo.lib,
   podofo_private.lib with MSVC) and all the dependent libraries.


DOXYGEN DOCUMENTATION

The API documentation can be found at
https://podofo.github.io/podofo/documentation/ .


GENERATE THE DOXYGEN DOCUMENTATION

 1. Prerequisite: Ensure you have Doxygen installed on your machine. If not,
    visit Doxygen's official website to download and install it.

 2. Generating Documentation: After completing the build process detailed in the
    Development quickstart chapter, navigate to the root directory of PoDoFo's
    source code. Open a terminal or command prompt and run the following
    command:
    
    doxygen build/Doxyfile
    
    

 3. Viewing the Documentation: Once the documentation generation completes,
    you'll find a documentation directory that contains the generated
    documentation. Open index.html in your favorite web browser to view the API
    documentation.
    
    cd build/doxygen/documentation
    open index.html
    
    


STRING ENCODING AND BUFFER CONVENTIONS

All std::strings or std::string_view in the library are intended to hold UTF-8
encoded string content. PdfString and PdfName constructors accept UTF-8 encoded
strings by default (PdfName accept only characters in the PdfDocEncoding char
set, though). charbuff abd bufferview instead represent a generic octet buffer.


API MIGRATION

PoDoFo has an unstable API that is the result of an extensive API review of
PoDoFo 0.9.x. At this link you can find an incomplete guide on migrating 0.9.8
code to 0.10.0. It is expected PoDoFo will converge to a stable API as soon as
the review process is completed. See API Stability for more details.


PODOFO TOOLS

> Warning: Tools are currently unsupported, untested and unmaintained.

PoDoFo tools are still available in the source tree but their compilation is
disabled by default because they are unsted/unmaintained, and will not receive
support until their status is cleared. It's not recommended to include them in
software distributions. If you want to build them make sure to bootstrap the
CMake project with -DPODOFO_BUILD_UNSUPPORTED_TOOLS=TRUE. Tools are conveniently
enabled in the playground at least to ensure library changes won't break their
compilation.


TODO

There's a TODO list, or look at the issue tracker.


FAQ

Q: How do I sign a document?

A: PoDoFo HEAD now supplies a high level signing procedure which is very
powerful and that allows to sign a document without having to supply a CMS
structure manually. By default, it supports signing a document with the modern
PAdES-B compliance profiles, but there's also a support for the legacy PKCS7
signatures. Providing you have both ASN.1 encoded X509 certificate and RSA
private key, you can sign a document with the following code:

auto inputOutput = std::make_shared<FileStreamDevice>(filepath, FileMode::Open);

PdfMemDocument doc;
doc.Load(inputOutput);

auto& page = doc.GetPages().GetPageAt(0);
auto& signature = page.CreateField<PdfSignature>("Signature", Rect());

auto signer = PdfSignerCms(x509certbuffer, pkeybuffer);
PoDoFo::SignDocument(doc, *inputOutput, signer, signature);



There's also a support for external signing services and/or signing the document
in memory buffers. See the various signing examples in the unit tests.

Q: Can I still use an event based procedure to sign the document?

Yes, the old low level procedure hasn't changed and it's still available. To
describe the procedure briefly, one has to fully Implement a PdfSigner, retrieve
or create a PdfSignature field, create an output device (see next question) and
use PoDoFo::SignDocument(doc, device, signer, signature). When signing, the
sequence of calls of PdfSignature works in this way: method PdfSigner::Reset()
is called first, then the PdfSigner::ComputeSignature(buffer, dryrun) is called
with an empty buffer and the dryrun argument set to true. In this call one can
just resize the buffer overestimating the required size for the signature, or
just compute a fake signature that must be saved on the buffer. Then a sequence
of PdfSigner::AppendData(buffer) are called, receiving all the document data to
be signed. A final PdfSigner::ComputeSignature(buffer, dryrun) is called, with
the dryrun parameter set to false. The buffer on this call is cleared (capacity
is not altered) or not accordingly to the value of PdfSigner::SkipBufferClear().

Q: PdfMemDocument::SaveUpdate() or PoDoFo::SignDocument() write only a partial
file: why there's no mechanism to seamlessly handle the incremental update as it
was in PoDoFo 0.9.x? What should be done to correctly update/sign the document?

A: The previous mechanism in PoDoFo 0.9.x required enablement of document for
incremental updates, which is a decision step which I believe should be
unnecessary. Also:

 1. In case of file loaded document it still required to perform the update in
    the same file, and the check was performed on the path of the files being
    operated to, which is unsafe;
 2. In case of buffers worked for one update/signing operation but didn't work
    for following operations, meaning the mechanism was bugged/unreliable.

An alternative strategy that makes clearer the fact that the incremental update
must be performed on the same file from where the document was loaded, or that
underlying buffer will grow its mememory consumption following subsequent
operations in case of buffer loaded documents, is available. It follows a couple
of examples showing the correct operations to update a document, loaded from
file or buffer:

 1. Save an update on a file loaded document, by loading and saving the document
    on the same location:

auto inputOutput = std::make_shared<FileStreamDevice>(filename, FileMode::Open);

PdfMemDocument doc;
doc.Load(inputOutput);

doc.SaveUpdate(*inputOutput);


 2. Save an update on a buffer, by copying the source first to the buffer that
    will be also used to load the document:

charbuff outputBuffer;
FileStreamDevice input(filepath);
auto inputOutput = std::make_shared<BufferStreamDevice>(outputBuffer);
input.CopyTo(*inputOutput);

PdfMemDocument doc;
doc.Load(inputOutput);

doc.SaveUpdate(*inputOutput);



Signing documents can be done with same technique, read the other questions for
more examples.

Q: Can I sign a document a second time?

A: Yes, this is tested, but to make sure this will work you'll to re-parse the
document a second time, as re-using the already loaded document is still
untested (this may change later). For example you can do as it follows:

auto inputOutput = std::make_shared<FileStreamDevice>(filepath, FileMode::Open);

{
    PdfMemDocument doc;
    doc.Load(inputOutput);
    auto& page = doc.GetPages().GetPageAt(0);
    auto& signature = page.CreateField<PdfSignature>("Signature1", Rect());

    PdfSignerCms signer(x509certbuffer, pkeybuffer);
    PoDoFo::SignDocument(doc, *inputOutput, signer, signature);
}

{
    PdfMemDocument doc;
    doc.Load(inputOutput);
    auto& page = doc.GetPages().GetPageAt(0);
    auto& signature = page.CreateField<PdfSignature>("Signature2", Rect());
    PdfSignerCms signer(x509certbuffer, pkeybuffer);
    PoDoFo::SignDocument(doc, *inputOutput, signer, signature);
}




NO WARRANTY

PoDoFo may or may not work for your needs and comes with absolutely no warranty.
Serious bugs, including security flaws, may be fixed at arbitrary timeframes, or
not fixed at all. Priority of implementing new features and bug fixing are
decided according to the interests and personal preferences of the maintainers.
If you need PoDoFo to integrate a feature or bug fix that is critical to your
workflow, the most welcome and fastest approach is to contribute high-quality
patches.


CONTRIBUTIONS

Please subscribe to the project mailing list which is still followed by several
of the original developers of PoDoFo. A gitter community has also been created
to ease some more informal chatter. If you find a bug and know how to fix it, or
you want to add a small feature, you're welcome to send a pull request,
providing it follows the coding style of the project. As a minimum requisite,
any contribution should be:

 * valuable for a multitude of people and not only self relevant for the
   contributor;
 * consistent with surrounding code and not result in unpredictable behavior
   and/or bugs.

Other reasons for the rejection, or hold, of a pull request may be:

 * the proposed code is incomplete or hacky;
 * the change doesn't fit the scope of PoDoFo;
 * the change shows lack of knowledge/mastery of the PDF specification and/or
   C++ language;
 * the change breaks automatic tests performed by the maintainer;
 * general lack of time in reviewing and merging the change.

If you need to implement a bigger feature or refactor, ask first if it was
already planned. The feature may be up for grabs, meaning that it's open for
external contributions. Please write in the relevant issue that you started to
work on that, to receive some feedback/coordination. If it's not, it means that
the refactor/feature is planned to be implemented later by the maintainer(s). If
the feature is not listed in the issues, add it and/or create a discussion to
receive some feedback and discuss some basic design choices.


AUTHORS

> Warning: Please don't use personal email addresses for technical support
> inquries, but create github issues instead.

PoDoFo is currently developed and maintained by Francesco Pretto, together with
Dominik Seichter and others. See the file AUTHORS.md for more details.


ABOUT

A C++17 PDF manipulation library

podofo.github.io/podofo/documentation


TOPICS

pdf cplusplus cpp pdf-files pdf-generation pdf-documents


RESOURCES

Readme


LICENSE

View license
Activity
Custom properties


STARS

394 stars


WATCHERS

15 watching


FORKS

81 forks
Report repository


RELEASES 5

Version 0.10.4 Latest
Sep 12, 2024
+ 4 releases


PACKAGES 0

No packages published




CONTRIBUTORS 22

 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 

+ 8 contributors


LANGUAGES


 * C++ 99.0%
 * Other 1.0%


FOOTER

© 2024 GitHub, Inc.


FOOTER NAVIGATION

 * Terms
 * Privacy
 * Security
 * Status
 * Docs
 * Contact
 * Manage cookies
 * Do not share my personal information

You can’t perform that action at this time.