We use PasDoc https://github.com/pasdoc/pasdoc for API documentation. Michalis, an author of this engine, is also a PasDoc developer, so suggestions about PasDoc improvements are also welcome :) We use PasDoc with --auto-abstract option. This is very handy, and it forces us (in a good way) to write really good 1st sentence of every documentation comment. Guidelines below can be summarized as "make the 1st sentence of every documentation really meaningful". Do's and dont's: - Do not start a sentence with "This..", like "This function does the job of calculating the sensor." or "This returns the calculated sensor value." or "This causes sensor value to be calculated." or things like that. Usually, the clumsy "This..." part of the sentence can be simply removed. Your sentence should simply describe what the function / class etc. does, as shortly as possible. This problem comes usually from a need to use a verb in the 1st documentation sentence. Well, there's no need for it. If you have a function named "SensorValue" (although "Sensor" seems even better), then user already knows that the "sensor value" is calculated by this function. The documentation string can be just "Calculate the sensor value.", "The sensor value.", or simply nothing, as the function name already says everything. - Write the documentations like orders, not like description. E.g. "Do calculation.", not "Does calculation.". - Do not start the 1st (or, preferably, any other) sentence with the name of the item you're just documenting. If you document method FooBar, do not write "FooBar does something cool." or "FooBar is the collision tag.". User reading the description already knows the name of item, so just write "Do something cool." or "The collision tag.". - Using "I.e.", especially at the beginning of the sentence, looks clumsy and often should be removed, this forces the sentence to be simpler. If you *really* have to, start the sentence with "That is". - Do not write "Will be called...". Just "Called..." is OK. - *Always* make a unit description, for every unit. They are handy at PasDoc's unit list. - Often, we have a unit with only a single / a few classes. In such cases it's best to place most of the documentation at the class, not at the unit description --- since the class is the actual item being described. Unit's description should then contain a very short description of the class and a link to the class. Like { Viewport (TCastleViewport). } - Do not start documentation string with "Simple..." or "Trivial...", like "Simple function to calculate cosinus". If it was worth including in the engine, then there's some value to it, even if the implementation is trivial :) Whether it has trivial or not trivial implementation, is not of primary interest to the documentation reader. The primary concern is "what it does". We use @groupBegin / @groupEnd tags in our documentation, although they are not yet implemented in PasDoc. See https://github.com/pasdoc/pasdoc/wiki/MichalisKamburelis -- they are planned.