PHP 7.1 ready Smart and Simple Documentation for your PHP project


Smart and Readable Documentation for your PHP project

Build Status Coverage Status Downloads Latest stable

ApiGen is the simplest, the easiest to use and the most modern api doc generator. It is all PHP 7.1 features ready easy to extend with own Finder, Annotation Subscriber or even Generator.

Just look at ApiGen API:

ApiGen Preview

Your Help is Needed to Finish 5.x Release

❤️ We need your help to test new version of ApiGen.

How to install it?

Add to your composer.json:

    "require": {
        "apigen/apigen": "dev-master",
        "roave/better-reflection": "dev-master#c87d856"

then update:

composer update

Test it, report issues or send PRs.

💀 Version 4.x is not supported, since there was huge change of Reflection library and the code was almost completely rewritten.

Built on Shoulders of Giants


composer require apigen/apigen --dev


Generate API docs by passing single source and destination options:

vendor/bin/apigen generate src --destination docs

Or generate API docs for multiple directories:

vendor/bin/apigen generate src tests --destination docs


Below is a minimal example configuration. Save it as a apigen.yml file in the root of your project:

    visibility_levels: [public, protected] # array
    annotation_groups: [todo, deprecated] # array
    title: "ApiGen Docs" # string
    base_url: "" # string
    overwrite: false # bool

What Annotations Have Extra Care?

@see, @covers, @uses

Reference to Class, Function, Property, Method etc. element.

In Code

 * @see SomeClass
 * @see SomeClass::$propety
 * @see SomeClass::someFunction()


@see <a href="class-SomeClass.html">SomeClass</a>
@see <a href="class-SomeClass.html#$someProperty">SomeClass::$property</a>
@see <a href="class-SomeClass.html#_someFunction">SomeClass::someFunction()</a>


A website url.

In Code

 * This is already mentioned on Wiki.
 * @link,_divided_we_fall Click to see a cool quote


This is already mentioned on Wiki.
@link <a href=",_divided_we_fall">Click to see a cool quote</a>


Associated element is internal, so ApiGen hides it.


To enable a custom theme just provide theme_directory configuration option in your apigen.yml:

    theme_directory: path/to/theme # path to theme's config file


Rules are simple:

  • new feature needs tests
  • all tests must pass
    composer complete-check
  • 1 feature per PR

We would be happy to merge your feature then.

  • Install failure - texy src location not found

    Install failure - texy src location not found

    When i try to install apigen with pear, i get this error:

    pear install
    downloading ApiGen-2.8.0.tgz ...
    Starting to download ApiGen-2.8.0.tgz (188,843 bytes)
    .........................................done: 188,843 bytes
    Could not download from "", cannot download "texy/Texy" (File not valid (received: HTTP/1.1 404 Not Found
    Error: cannot download "texy/Texy"
    apigen/ApiGen requires package "texy/Texy"
    Download failed
    install failed

    Anyone with the same issue?

    opened by acrobat 41
  • Unexpected token found

    Unexpected token found

    I have included the latest stable version through Composer, and am trying to generate docs for a project.

    The output concludes:

    Scanning sources and parsing
    Unexpected token found.

    How would I go about finding the cause of this issue? Can I enable a debug mode or get a stack trace? There is no documentation about this. And what does the error message mean?

    opened by marcovtwout 30
  • Fixed link generation for type hints.

    Fixed link generation for type hints.

    I just have started to work on the function return types I promised. But I have found another issue that is connected to it.

    There was a problem that functions getTypeHintClassOrInterfaceReflection() relied on class_exists(). But it could happen that the class is not autoloaded before BetterReflection tries to locate it. And that is problem: for classes that were not located yet, it is going to fail. And for internal PHP classes it is going to work and generate a link to page that will not be generated.

    I think that it would be better to check existence of the class it in the ReflectionStorage directly. I do not think that is is responsibility of the ClassReflection to know about other classes, it should be a matter of ReflectionStorage. And also there should be generated only links leading to elements really present in the ReflectionStorage (otherwise it could generate dead links to missing pages) so it is another reason to change it in a way I propose.

    Additionally, there was bug with generating links - it printed just the path to the file but not generate a real link.

    Originally, it looked like this: bad

    And after the fixes: good

    opened by vlastavesely 28
  • Cleanup - ready to merge

    Cleanup - ready to merge

    • drop file licenses, not really needed
    • drop phar from gitignore
    • scrutinizer cleanup
    • travis cleanup
    • phpstan added
    • drop coverrals (spam), use scrutinizer
    opened by TomasVotruba 27
  • Call for Contributors

    Call for Contributors

    Dear ApiGen contributors,

    EDIT/UPDATE The project's activity has recently picked up, this issue is left as a general call for contributors.

    I would like to say thanks for everyone who has been contributing so far as it's been a great project. However, I am making this issue as a sort of call-for-contributors (with commit rights to the project) as the project seems to have very low activity and is getting problematic to use as it's getting outdated.

    I have been trying to push for some activity and get some basic PRs merged, there are others too, but the project seems to have stopped merging PRs since end of october last year. As a user of apigen I would like to ask if there are any contributors left with commit rights that could help us merge in a few PRs and at least do a long overdue 4.2 release?

    I am willing to contribute some time myself, but seeing the inactivity I am hesitating and considering other options. Do we have any active contributors that would be willing to help?

    opened by ek9 27
  • Request for documentation: creating apigen extension to support WordPress hooks & filters

    Request for documentation: creating apigen extension to support WordPress hooks & filters

    I'm looking to build a menu section called Hooks that looks for docblocks with the tag @hook and a menu section Filters that looks for a docblock tag @filter

    For example:

    * Applies a special action 
    * @hook apply_special_action
    * @param ARRAY $data array of relevant data
    do_action('apply_special_action' , data);


    opened by atwellpub 27
  • HTML code in parameter list

    HTML code in parameter list

    the function:

     * @param string $key       the Key
     * @param string $collectionId the Collection ID (optional)
     * @return array the settings array
     * @throws \Lib\EpgServiceException
    public function getGrabber($key, $collectionId = null) {}

    will be displayed as:

        <p>the Key</p>
        <p>the Collection ID (optional)</p>
    opened by pfefferle 25
  • "NonExists" could not be found in the located source


    class B extends NonExists

    Actual result:

    % php ./bin/apigen generate -vvv --destination=/var/www/api ./test                                                                 
      Roave\BetterReflection\Reflection\ReflectionClass "NonExists" could not be found in the located source  
    Exception trace:
     () at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflector/Exception/IdentifierNotFound.php:31
     Roave\BetterReflection\Reflector\Exception\IdentifierNotFound::fromIdentifier() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflector/ClassReflector.php:55
     Roave\BetterReflection\Reflector\ClassReflector->reflect() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflection/ReflectionClass.php:732
     Roave\BetterReflection\Reflection\ReflectionClass->getParentClass() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflection/ReflectionClass.php:1141
     Roave\BetterReflection\Reflection\ReflectionClass->getInheritanceClassHierarchy() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflection/ReflectionClass.php:971
     Roave\BetterReflection\Reflection\ReflectionClass->getInterfaces() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflection/ReflectionClass.php:999
     Roave\BetterReflection\Reflection\ReflectionClass->getInterfaceNames() at /home/popsul/projects/ApiGen/vendor/roave/better-reflection/src/Reflection/ReflectionClass.php:1061
     Roave\BetterReflection\Reflection\ReflectionClass->implementsInterface() at /home/popsul/projects/ApiGen/packages/Reflection/src/Reflection/Class_/ClassReflection.php:177
     ApiGen\Reflection\Reflection\Class_\ClassReflection->implementsInterface() at /home/popsul/projects/ApiGen/packages/Element/src/ReflectionCollector/NamespaceReflectionCollector.php:45
     ApiGen\Element\ReflectionCollector\NamespaceReflectionCollector->processReflection() at /home/popsul/projects/ApiGen/packages/Element/src/ReflectionCollectorCollector.php:24
     ApiGen\Element\ReflectionCollectorCollector->processReflection() at /home/popsul/projects/ApiGen/packages/Reflection/src/TransformerCollector.php:76
     ApiGen\Reflection\TransformerCollector->transformSingle() at /home/popsul/projects/ApiGen/packages/Reflection/src/TransformerCollector.php:42
     ApiGen\Reflection\TransformerCollector->transformGroup() at /home/popsul/projects/ApiGen/packages/Reflection/src/Parser/Parser.php:98
     ApiGen\Reflection\Parser\Parser->transformBetterClassInterfaceAndTraitReflections() at /home/popsul/projects/ApiGen/packages/Reflection/src/Parser/Parser.php:104
     ApiGen\Reflection\Parser\Parser->parseClassElements() at /home/popsul/projects/ApiGen/packages/Reflection/src/Parser/Parser.php:54
     ApiGen\Reflection\Parser\Parser->parseDirectories() at /home/popsul/projects/ApiGen/src/Application/ApiGenApplication.php:55
     ApiGen\Application\ApiGenApplication->runCommand() at /home/popsul/projects/ApiGen/src/Console/Command/GenerateCommand.php:61
     ApiGen\Console\Command\GenerateCommand->execute() at /home/popsul/projects/ApiGen/vendor/symfony/console/Command/Command.php:264
     Symfony\Component\Console\Command\Command->run() at /home/popsul/projects/ApiGen/vendor/symfony/console/Application.php:869
     Symfony\Component\Console\Application->doRunCommand() at /home/popsul/projects/ApiGen/vendor/symfony/console/Application.php:223
     Symfony\Component\Console\Application->doRun() at /home/popsul/projects/ApiGen/vendor/symfony/console/Application.php:130
     Symfony\Component\Console\Application->run() at /home/popsul/projects/ApiGen/bin/apigen:16
    generate [--destination DESTINATION] [--] <source> (<source>)...

    Expected behavior: Documentation should be generated correctly, but without anchor to NonExists class.

    opened by POPSuL 23
  • Enable CI for Windows OS (appveyor?)

    Enable CI for Windows OS (appveyor?)

    It would be nice to have tests run on Windows OS so we can make sure compatibility with Windows OS. I see that there are a few issues regarding path handling that makes tests fail for windows users from time to time.

    What do you guys think? I also only know of appveyour, so I suggest trying that out.

    opened by ek9 23
  • 4.2 Release

    4.2 Release

    It's been more than 1 year since the last release. There have been good amount of updates and I think it would be good to release an updated version. Otherwise, most people are bound to start using dev-master, which is problematic in most projects.

    I suggest to compile a list of issues we want to have fixed before 4.2 release and do a release.

    My suggestion for issues to fix:

    • #770 Symfony v3 component support
    • #732 self-update is broken
    opened by ek9 23
  • Call to undefined method Latte\Template::getFile().

    Call to undefined method Latte\Template::getFile().

    I've ran a composer update and now when I run my previously working ApiGen setup I get this error message. I'm guessing this is because some of the composer dependencies required by ApiGen have been updated and broken it?

    My composer,json is requiring any 2.* version of ApiGen - currently using 2.8.

    "apigen/apigen": "2.*", 
    opened by awalls 23
  • add ability to include custom javascript and css files.

    add ability to include custom javascript and css files.

    It would nice to allow developer to customize their documentation using javascript and css.

    two new configuration entries would be needed for this:

    1. scripts:
      - 'path/to/my_script.js'
    1. styles:
      - 'path/to/my_style.css'

    If a path points to a file in the filesystem, a copy should be made to assets/, if it's a url it should be used as is.

    opened by azjezz 3
  • feature request: namespace / project overview using ``

    feature request: namespace / project overview using ``

    It would be nice to add ability to include a namespace overview and project overview using README files.

    for example, if rendering src/, and is found in src/Foo/Bar directory, include it on top of the the namespace-Foo.Bar.html, this would allow developers to include an overview about a section over their project.

    a new configuration entry could be added to do the same for index.html.


    readme: 'path/to/'
    opened by azjezz 0
  • Missing classes that should exist

    Missing classes that should exist

    When running apigen on my (sadly private) project, I am getting a bunch of "missing classes" warnings for classes in libraries used via composer in the vendor directory. It's not all of the imported classes, just some and it's not classes in the directory I am running apigen on (src).

    Missing Dropbox\Models\DateTime                                                  
    referenced by Dropbox\Models\FileRequest                                         
    Missing Symfony\Component\Translation\TranslatorInterface                        
    referenced by Carbon\CarbonInterface                                             
    Missing Dropbox\Http\Psr\Http\Message\StreamInterface                            
    referenced by Dropbox\Http\RequestBodyInterface     

    Is there a way to "ignore" the vendor directory or add classes that are "known" without knowing their content on the system?

    It seems that these "missing classes" are due to issues inside of the used libraries, not my own integration or script.

    Also, it's warnings, I am aware... is there a way to just silence them?

    opened by davidsneighbour 1
  • Not parsing generated files of laravel-ide-helper package

    Not parsing generated files of laravel-ide-helper package

    I was wondering is it possible for ApiGen to analyze '_ide_helper_models.php' file that's generated by barryvdh / laravel-ide-helper? In order to add class annotations like @property and @method to the generated documentation files.

    I see that some of it's functionality is built on PHPStan that supports scanFiles option where you can add those helper files and some IDEs like PhpStorm can "follow" the @mixin annotation.

    It seems to me that '_ide_helper_models.php' file is ignored by ApiGen

    opened by georgbast 1
  • @package tag is not used anymore in 7.0.0-alpha

    @package tag is not used anymore in 7.0.0-alpha

    I am trying to use the new version of ApiGen and I see that packages are not used anymore to structure the docs and only the namespaces do that. Is it possible to retrieve the package structure?

    opened by clemsciences 8
  • Feature Request: More thorough filtering

    Feature Request: More thorough filtering

    I use this custom filter:

    My problem is that the filtered classes still show up in some places:

    1. ShouldNotHappenException under Exceptions in this listing
    2. In tree hierarchies (these classes are even marked as @internal), another example
    3. Search should prioritize and sort primary symbols on top.

    Ideally I'd like to NOT render pages like at all because it creates a lot of noise. But I understand it's not trivial because it's going to be linked in many places and those links should no longer be links.

    opened by ondrejmirtes 3
  • v7.0.0-alpha(Jul 10, 2022)

    Rewritten to be based on nikic/php-parser and phpstan/phpdoc-parser with full support of PHP 8.1 features.



    With Docker

    ApiGen is available as apigen/apigen Docker image which you can directly use.

    docker run --rm --interactive --tty --volume "$PWD:$PWD" --workdir "$PWD" \
      apigen/apigen \
      src --output docs

    With Phar

    This will install ApiGen phar binary to tools/apigen.

    mkdir -p tools
    curl -L -o tools/apigen
    chmod +x tools/apigen
    tools/apigen src --output docs

    With Composer

    This will install ApiGen to tools/apigen directory with executable entry point available in tools/apigen/bin/apigen.

    composer create-project --no-dev apigen/apigen:^[email protected] tools/apigen
    tools/apigen/bin/apigen src --output docs
    Source code(tar.gz)
    Source code(zip)
    apigen.phar(13.66 MB)
  • v5.0.0-RC5(Aug 31, 2017)

    If you are interested in ApiGen behind-scene @tomasvotruba wrote a post about ApiGen 5 revival process:


    • @vlastavesely added as a co-maintainer, thanks to his great additions to the project :clap:

    • #971 Added resolving parent classes, Thanks to @vlastavesely

    • #987 Improve parsing by BetterReflection by Caching, make use of; also decouple BetterReflection subpackage and turn static to DI


    • #977, #978 Updated to EasyCodingStandard 2.2.6 with new checkers
    • #990 Improve ProjectVendorSourceLocatorFactory readability, Thanks @simara-svatopluk


    • #974 Deprecate all subelements of deprecated classes, interfaces and traits, Thanks to @vlastavesely
    • #980 Fixed line wraps in source code (css), Thanks to @vlastavesely
    • #972 Fixed __CLASS__ parsing, see, Thanks to @vlastavesely

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v5.0.0-RC4(Aug 3, 2017)


    • #926 Initial support for ReflectionConstant, Thanks @POPSuL also for extensive PR to BetterReflection repository
    • #959 Added ValueDumper, Thanks @vlastavesely
    • #958 Added support for interface constants, Thanks @vlastavesely
    • #970 Added ApiGen Docs DEMO - to be found at


    • #956 Reflection: allowed nullable filenames for internal reflections, Thanks @vlastavesely
    • #969 Upgraded to EasyCodingStandard 2.2


    • #955 RelativePathResolver: fix for functions loaded from file source, Thanks @vlastavesely
    • #957 Parser: fixed file source loader, Thanks @vlastavesely
    • #954 Deprecated methods of deprecated interface, Thanks @vlastavesely
    • #969 Lock Roave\BetterReflection to specific commit to prevent breaking the code

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v5.0.0-RC3(Jul 16, 2017)

    Huge thanks to @vlastavesely for dozens of PR to this release! Your work is pushing this repository fast forward.


    • #944 Added support for FileLocator; Thanks to @vlastavesely
      vendor/bin/apigen generate src/Directory src/SomeClass.php --destination /api
    • #940 Added support for traits with properties; Thanks to @vlastavesely
    • #916 Added support different vendor analysis by adding a ComposerSourceLocator; Thanks to @vlastavesely
    • #946 Added highlighting of method's param default value; Thanks to @vlastavesely
    • #932 Added autocomplete search; Thanks to @vlastavesely and also to @POPSuL


    • #934 Disabled function param sorting + fixed function.latte; Thanks to @vlastavesely
    • #943 Minor improvement in 'finished' msg; Thanks to @nelson6e65
    • #933 Use local copy of jQuery; Thanks to @vlastavesely


    • #950 Fixed link generation for type hints; Thanks to @vlastavesely
    • #952 Fixed @see/@link annotation for links and not elements.
    • #941 Fixed improper parent class retrieval; Thanks to @vlastavesely
    • #939 #953 Fixed strike outs for deprecated elements; Thanks to @vlastavesely
    • #925 Theme: fixed whitespace wrapping for long description; Thanks to @vlastavesely
    • #927 Fixed console progressbar overflow; Thanks to @vlastavesely

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v5.0.0-RC2(Jul 2, 2017)


    • #888 more informative information added on --version call in CLI; Thanks to @brunoaugusto
    • #895 implemented TraitMethodReflection::isDeprecated(); Thanks to @vlastavesely
    • #923 used local Bootstrap CSS for more flexible local development; Thanks to @vlastavesely
    • #919 added exception standalone page via ExceptionGenerator + separation from classes in NamespaceGenerator; Thanks to @vlastavesely


    • #918 use Coveralls for coverage over Scrutinizer


    • #917 fixed removing internal classes for NamespaceGenerator
    • #905 StepCounter improvements; Thanks to @vlastavesely
    • #898 fixed source code highlighting templates; Thanks to @vlastavesely
    • #921, #892, #904 fixed autoloading for composer create-project ... and composer global require ... command and added tests for them; Thanks to @brunoaugusto and @nelson6e65
    • #891, #893 fixed trait name in template; Thanks to @vlastavesely

    Thank you all guys for great work. I'm very happy to see such activity around this project! :heart:

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v5.0.0-RC1(Jul 2, 2017)


    • #863 Added Annotation package
    • Added Element package
    • Added ModularConfiguration package
    • Added Reflection package
    • #858 Added StringRouting package
    • Added .editorconfig to the project
    • #704 Added support for static type
    • #731 Added bitcoin link support via @link bitcoin:address
    • Added theme option to load theme from directory
    • Added phpDocumentor/TypeResolver for type resolving
    • Added phpDocumentor/ReflectionDocBlock for annotation parsing
    • Added Symplify/EasyCodingStandard to make coding standard powerful
    • Added phpstan for static analysis checks


    • #827 Changed PHP Token Reflection library from andrewsville/php-token-reflection to roave/better-reflection
    • Minimum PHP requirement was increased from 5.4 to 7.1
    • #880 Change DI library from Nette\DI to Symfony\DependencyInjection due to Symfony 3.3 new features and PSR-11
    • Project is now PSR-2 compatible
    • #64 UTF-8 is now a standard/default charset. [ApiGen] will expect UTF-8 encoded files by default
    • #771 Only relevant classes are generated in sidebar and source code pages
    • Enabled autocomplete for methods and properties
    • #814 #862 ThemeDefault and ThemeBootstrap merged to one local theme, with support of Bootstrap 3 and mobile-friendly design
    • #823 @internal annotation cannot be ignored now
    • #826 Long and short description merged to one, since there was thin and not clear line between them
    • #818 #827 Class<Generator,Reflection> split to Class, Trait and Interface with own type-specific methods
    • #845 #845 SourceCodeGenerator dropped and moved to particular reflection generators (ClassGenerator...)
    • #855 Indirect and direct users/implementers/inheritors merged to one group
    • #858 Tree and Namespace filters simplified
    • #862 Standardize use of annotations
    • #860 Left sidebar removed, it duplicated main content and had complicated tree structures
    • #749 Don't fully qualify local members


    • #520 Fixed an issue with temporary files not being removed upon exit (in cases where failure happens)
    • #631 Fixed an issue with generate command throwing an error
    • #804 Fixed tests (and hopefully compatibility) on Windows OS
    • Fixed deprecation checks when generating docs
    • Fixed issues with exception handling in low-level parser
    • Fixed an error on generating docs for non-existent traits
    • #668 Fixed an issue with handling paths on different OS. The paths should now be normalized and work on Windows
    • #740 Fixed an issue where ApiGen sometimes would incorrectly resolve return typehints for functions
    • #734 Fixed an issue when docblocks marked with @internal would be documented
    • #750 Fixed support of $this as return type hint
    • #848 Fixed missing methods in class
    • #717 Fixed duplicated function source code

    PHP 5.5, 5.6 and 7 and parsing related Fixes

    • #620 Fixed composed trait methods
    • #774 Fixed default constant value and __DIR__ constant parsing
    • #751 Fixed broken function definition
    • #680 Fixed ::class parsing


    • #826 --main option dropped
    • #813 Magic elements dropped
    • --charset CLI option has been dropped (expecting UTF-8 now by default)
    • --skip-doc-path CLI option has ben dropped
    • #827 --template-config and --template-theme dropped
    • #853 --exclude and --extensions options dropped (use FinderInterface implementation instead)
    • Removed various deprecated generators (Robots, Sitemap) which weren't used
    • #809 Tree generator dropped
    • Dropped Zip generator, internet is quite fast nowadays.
    • Dropped PHAR support.
    • #827 Exception element dropped
    • Dropped element js toggling in page, was bugged and was causing confused page jumps.
    • Dropped support for global constant documentation, as BetterReflection doesn't support it out of the box yet.

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v4.1.2(Nov 29, 2015)

  • v4.1.1(Jul 2, 2017)

  • v4.1.0(Apr 4, 2015)


    • #573 --config now supports YAML format, thanks to @trong
    • #536 --source option now accepts single files
    • #539 --annotation-groups options added, to generate pages with single annotation (e.g. for todo: --annotation-groups=todo)
      • before:
        • --todo --deprecated (only these two)
      • now:
        • --annotation-groups todo,deprecated
        • --annotation-groups event,api


    • #550 wiping out destination is now protected by asking
    • #523 when page from --annotation-groups has no items, info message is displayed
    • #504 themes decoupled to standalone packages
    • [] Bootstrap theme was updated to Twitter Bootstrap 3, thanks to @olvlvl
    • #507 use Box for PHAR compiling


    • #545 missloading of class list in layout panel
    • #526 Exceptions were displayed instead of interfaces, thanks to @jrnickell
    • #530 --source-code options should be --no-source-code, thanks to @yoosefi
    • #538 spaces from removed, thanks to @ramsey
    • #575 function link fixed


    • contributing info added
    • upgrade from 2.8 to 4.0 info added

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.1.0.phar(1.28 MB)
  • v4.0.1(Jul 2, 2017)


    • Fixed issued when parsing configuration array when using phar #564

    Full diff:

    Source code(tar.gz)
    Source code(zip)
  • v4.0.0(Jan 3, 2015)

    Why Skip 3.0?

    Version 3.0 was skipped, because master branch had 3.0-dev alias with code base similar to 2.8. Since then there were many BC breaks, thus major version was bumped to 4.0.

    This release closes refactoring of version 2.8. Its aim was to improve code base, provide fairly high code coverage (from 0 % in 2.8) to improve further development and close old pull-requests. Now it's at 84 %, which really makes changes easier.

    Saying that, next version will focus on:

    • new features based on issues/PR from you, end users.
    • website management
    • package decoupling
    • documentation


    • [#492] use "dash" type (BC for 2.8)
    • [#493] support for various CLI option input format
    • php is now off by default, turn it on by --php
    • Kdyby\Console removed
    • autocomplete option dropped - to much detailed was use-non-friendly
    • self-update command now uses


    • [#490] reading options from apigen.neon fixed
    • [#434] PHAR installation simplified and fixed for cross platform
    • [#465] relative path on Windows fixed
    • [#375] constant version returned, so now it's available in composer installed packages as well

    Full diff:

    How to Upgrade

    • Default command generate added:


      apigen -s source -d destination


      apigen generate -s source -d destination

    • New command self-update added, to upgrade .phar file.


      manual update


      apigen self-update

    • Bool options for arguments passed via CLI are off when absent, on when present.


      ... --tree yes # tree => true

      ... --tree no # tree => false


      ... --tree # tree => true

      ... # tree => false

    • Options with values for arguments passed via CLI now accept multiple formats:


      ... --access-levels public --access-levels protected


      ... --access-levels public,protected


      ... --access-levels="public,protected"


      ... --access-levels public --access-levels protected

    • Some CLI options were dropped. To see what the available ones are, just run apigen generate --help.

      • --skip-doc-prefix was dropped, use --skip-doc-path instead
      • --allowed-html was dropped
      • --autocomplete was dropped; autocomplete now works for classes, constants and functions by default
      • --report; use Php_CodeSniffer for any custom checkstyle
      • --wipeout; now wipes out everytime
      • --progressbar; now always present
      • --colors; now always colors
      • --update-check; update manually by apigen self-update (new version is released every ~ 2 months)
    • Some CLI options were renamed and reversed.

      • --source-code was off by default, now it on by default; to turn it off, add --no-source-code
    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0.phar(774.68 KB)
  • v4.0.0-RC5(Dec 17, 2014)

    New features

    • [#470] Generator decoupled to TemplateGenerators, standalone classes that generate only particular part of elements
    • PHPUnit is now used for tests as more understandable to many progammers
    • code coverage added, from 0 % just three months ago, it's 33 % for this release
    • [#456] ThemeConfig added, makes it easier to create custom templates, mention only differences
    • [#457] bump to min version PHP 5.4 [BC break]


    • GenerateCommand doesn't write to config anymore
    • 'main', 'optional' and 'common' sections removed and it's content moved to 'templates' [BC break]
    • [#459, #422] returned formed CLI options
    • [#460, #424] source code is back optional
    • [#468] CharsetConvertor decoupled to standalone extension
    • dropped scanning phar, not useful [BC break]
    • dropped skipDocPrefix as confusing, use skipDocPath as regular expression standard [BC break]


    • [#373] escaped HTML code in parameter list
    • [#423, #437] Reflection: functions are never loaded
    • [#445] 'mixed' is not 'undefined'
    • [#475] Function with arguments throws exception
    • [#473] The option "autocomplete" does not exist.
    • [#467] Generator not working: mb_substr_count expects at most 3 parameters, 4 given
    • [#466] Composer install failing on OS X

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0-RC5.phar(792.74 KB)
  • v4.0.0-RC4(Nov 9, 2014)

    New features

    • - Code Sniffer added
    • some tests added


    • - system dir is now used for caching (instead of working path)
    • - Scanner now uses Nette\Utils\Finder
    • - Parses progress bar is measured by file count (file size before), since such detail has almost no added value
    • - MemoryLimitCheck removed, - automatic setup used instead (Composer inspired)


    • [#394, #407] quiet option for empty CLI output fixed
    • [#396, #399] self-update command fixed
    • [#384] package link fixed
    • relative paths on Windows fixed
    • [#412] exclude mask now only applies on current dir
    • [#408] "located" paths cut out fixed
    • [#416] link to method start anchor fixed
    • [#432] purge method fixed

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0-RC4.phar(598.23 KB)
  • v4.0.0-RC3(Oct 9, 2014)

    New features

    • [#382] selfupdate command for phar added, will download most up-to-date stable version
    • [#364] --working-dir option added, same functionality as Composer


    • - progress bar simplified


    • [#390] duplicate return values
    • [#385] allow renamed apigen.phar to apigen
    • [#373] method params contained line numbers
    • [#257] traits methods are not displayed
    • [#234] allow using traits outside source
    • - theme choser fixed

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0-RC3.phar(593.17 KB)
  • v4.0.0-RC2(Oct 5, 2014)


    • SourceCodeHilighter: new method highlightAndAddLineNumbers() decoupled from highlight() method bool param


    • [#366] Filter 'resolveElement' is not defined + test added
    • [#365] Undefined variable: namespaces + test added
    • [#362] Problems with default values + test added
    • GenerateCommand error output broken style

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0-RC2.phar(592.55 KB)
  • v4.0.0-RC1(Oct 4, 2014)

    New features

    BC breaks

    • default markup is now Markdown using michelf\php-markdown
    • dropped PEAR support
    • dropped options:
      • allowed-html
      • source-code (link to source code is now always displayed)
      • report
      • wipeout
      • quiet
      • progressbar (always displayed)
      • colors
      • update-check

    Full diff:

    Source code(tar.gz)
    Source code(zip)
    apigen-4.0.0-RC1.phar(602.68 KB)
  • v2.8.1(Sep 1, 2014)

  • 2.8.0(Sep 3, 2014)

    • Added support for @property and @method annotations
    • Added support for variable length parameters
    • Enabled selection of more rows in source code
    • Templates can specify minimum and maximum required ApiGen version
    • Added template for 404 page
    • Improved support for malformed @param annotations
    • Fixed excluding files and directories and detecting non accessible files and directories
    • Fixed internal error when no timezone is specified in php.ini
    • Fixed autocomplate in Opera browser
    • Nette framework updated to version 2.0.5
    • TokenReflection library updated to version 1.3.1
    • FSHL library updated to version 2.1.0
    Source code(tar.gz)
    Source code(zip)
  • 2.7.0(Sep 3, 2014)

    • Support of custom template macros and helpers
    • Information about overridden methods in class method list
    • Template UX fixes
    • Fixed bugs causing ApiGen to crash
    • TokenReflection library updated to version 1.3.0
    • Bootstrap2 based template
    • Removed template with frames
    Source code(tar.gz)
    Source code(zip)
  • 2.6.1(Sep 3, 2014)

  • 2.6.0(Sep 3, 2014)

    • Better error reporting, especially about duplicate classes, functions and constants
    • Character set autodetection is on by default
    • Changed visualization of deprecated elements
    • Improved packages parsing and visualization
    • Improved @license and @link visualization
    • Improved parsing
    • Added option --extensions to specify file extensions of parsed files
    • Minor visualization improvements
    • Fixed autocomplete for classes in namespaces
    • TokenReflection library updated to version 1.2.0
    Source code(tar.gz)
    Source code(zip)
  • 2.5.0(Sep 3, 2014)

    • Added option --groups for grouping classes, interfaces, traits and exceptions in the menu
    • Added option --autocomplete for choosing elements in the search autocomplete
    • Inheriting some annotations from the file-level docblock
    • @uses annotations create a @usedby annotation in the target documentation
    • Added warning for unknown options
    • Added support of comma-separated values for @see
    • Changed all path options to be relative to the configuration file
    • Fixed dependencies check
    • Nette framework updated to 2.0.0 stable version
    • TokenReflection library updated to version 1.1.0
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(Sep 3, 2014)

  • 2.4.0(Sep 3, 2014)

    • TokenReflection library updated to version 1.0.0
    • Fixed support for older PHP versions of the 5.3 branch
    • Option templateConfig is relative to the config file (was relative to cwd)
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Sep 3, 2014)

    • Added support for default configuration file
    • Added link to download documentation as ZIP archive
    • Added option --charset and autodetection of charsets
    • Added support for @ignore annotation
    • Added PHAR support
    • Added support for ClassName[]
    • Added memory usage reporting in progressbar
    • Improved templates for small screens
    • Changed option name --undocumented to --report
    • FSHL library updated to version 2.0.1
    Source code(tar.gz)
    Source code(zip)
  • 2.2.1(Sep 3, 2014)

  • 2.2.0(Sep 3, 2014)

    • Added an option to check for updates
    • Added an option to initially display elements in alphabetical order
    • Added an option to generate the robots.txt file
    • Added required extensions check
    • Changed reporting of undocumented elements to the checkstyle format
    • Improved deprecated elements highlighting
    • Highlighting the linked source code line
    • Unknown annotations are sorted alphabetically
    • Fixed class parameter description parsing
    • Fixed command line options parsing
    • Fixed include path setting of the GitHub version
    • Fixed frames template
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Sep 3, 2014)

    • Experimental support of PHP 5.4 traits
    • Added option --colors
    • Added template with frames
    • Added templates option to make element details expanded by default
    Source code(tar.gz)
    Source code(zip) is an documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It helps you create great looking documentation in a developer friendly way. - Deprecation Notice This repository is deprecated! has been moved to an organization, to guarantee future development and support. So

Justin Walsh 4.6k Dec 16, 2022 is an documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It helps you create great looking documentation in a developer friendly way. is a documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly. It help 719 Jan 1, 2023
phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to generate a complete set of API Documentation

phpDocumentor What is phpDocumentor? phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to genera

phpDocumentor 3.7k Jan 3, 2023
Generates documentation for your REST API from annotations

NelmioApiDocBundle The NelmioApiDocBundle bundle allows you to generate a decent documentation for your APIs. Migrate from 3.x to 4.0 To migrate from

Nelmio 2.1k Jan 6, 2023
Generate interactive OpenAPI documentation for your RESTful API using doctrine annotations

Generate interactive OpenAPI documentation for your RESTful API using doctrine annotations

Robert Allen 4.6k Jan 6, 2023
Documentation generator for PHP Code using standard technology (SRC, DOCBLOCK, XML and XSLT)

phpDox phpDox is a documentation generator for PHP projects. This includes, but is not limited to, API documentation. The main focus is on enriching t

Arne Blankerts 588 Dec 22, 2022
Documentation Generator for PHP

phpDocumentor What is phpDocumentor? phpDocumentor is an application that is capable of analyzing your PHP source code and DocBlock comments to genera

phpDocumentor 3.7k Dec 28, 2022
A php API documentation generator, fork of Sami

Doctum, a PHP API documentation generator. Fork of Sami Curious about what Doctum generates? Have a look at the MariaDB MySQL Kbs or Laravel documenta

Code LTS 203 Dec 21, 2022
An API documentation generator

Sami: an API documentation generator WARNING: Sami is not supported nor maintained anymore. Feel free to fork. Curious about what Sami generates? Have

null 2k Dec 17, 2022
Documentation Generator for WordPress.

Pronamic WordPress Documentor is a tool to automatically extract data about the actions and filters of your WordPress theme or plugin.

Pronamic 36 Dec 8, 2022
Sami: an API documentation generator

Sami: an API documentation generator WARNING: Sami is not supported nor maintained anymore. Feel free to fork. Curious about what Sami generates? Have

null 2k Dec 17, 2022
Generate Sphinx/ReStructured documentation from PHPDoc

PHP-phpdoc-to-rst Forked from Francesco "Abbadon1334" Danti by AeonDigital. In this fork the changes has only visual and superficial effects [ just be

Rianna Cantarelli 0 Nov 16, 2021
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and / or RESTful API

Luracast Restler ![Gitter]( Chat.svg) Version 3.0 Release Candidate 5 Restler is a simple and effective multi-format Web

Luracast 1.4k Jan 2, 2023
PhpMetrics provides metrics about PHP project and classes, with beautiful and readable HTML report.

PhpMetrics provides metrics about PHP project and classes, with beautiful and readable HTML report.

PhpMetrics 2.3k Jan 5, 2023
Simple forum software for building great communities.

About Flarum Flarum is a delightfully simple discussion platform for your website. It's fast and easy to use, with all the features you need to run a

Flarum 5.8k Jan 3, 2023
Learn how to implement the most important Design Patterns into your PHP application, uses PHP 8.1

Learn how to implement the most important Design Patterns into your PHP application. This project uses PHP 8.1. it has examples for each Pattern and an Article explaining how to use them step by step, their advantages, and disadvantages.

Gabriel Anhaia 203 Dec 15, 2022
30 seconds of code Short PHP code snippets for all your development needs

30 seconds of code Short PHP code snippets for all your development needs Visit our website to view our snippet collection. Use the Search page to fin

30 seconds of code 2.5k Jan 1, 2023
FluxBB is a fast, light, user-friendly forum application for your website.

FluxBB 1.5 Readme About FluxBB is an open source forum application released under the GNU General Public Licence. It is free to download and use and w

FluxBB 477 Dec 27, 2022
Ladumor Laravel Swagger help to setup swagger in your application easily

Laravel Swagger Installation Install the package by the following command, composer require ladumor/laravel-swagger Add Provider Add the provider to

Shailesh Ladumor 23 Jun 17, 2022