Skip to content

Schema reference

This page documents every field of the takuhon.json schema: each section, its type, whether it is required, its constraints, and what it is for. For a gentler introduction to the document as a whole, see The takuhon.json file.

The tables below are generated from the canonical schema (version 0.6.0). Field descriptions are reproduced verbatim from the schema, which is maintained in English as the canonical contract.

FieldTypeRequiredConstraintsDescription
schemaVersionstringYespattern ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$Semantic version of the takuhon schema this document conforms to.
profileProfileYes
linksarray of LinkYes≤ 100 items
careersarray of CareerYes≤ 50 items
projectsarray of ProjectYes≤ 100 items
skillsarray of SkillYes≤ 200 items
certificationsarray of CertificationNo≤ 50 items
membershipsarray of MembershipNo≤ 50 items
volunteeringarray of VolunteeringNo≤ 50 items
honorsarray of HonorNo≤ 50 items
educationarray of EducationNo≤ 30 items
publicationsarray of PublicationNo≤ 100 items
languagesarray of LanguageNo≤ 30 items
coursesarray of CourseNo≤ 100 items
patentsarray of PatentNo≤ 50 items
testScoresarray of TestScoreNo≤ 30 items
recommendationsarray of RecommendationNo≤ 50 items
contactContactYes
settingsSettingsYes
metaMetaYes

No additional properties beyond those listed.

BCP-47 language tag (e.g., ‘en’, ‘ja’, ‘zh-Hant’, ‘pt-BR’).

  • Type: string
  • Constraints: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$; 2–35 chars

ISO 3166-1 alpha-2 country code (uppercase, two letters).

  • Type: string
  • Constraints: pattern ^[A-Z]{2}$

Year-month in ‘YYYY-MM’ format (Gregorian calendar).

  • Type: string
  • Constraints: pattern ^[0-9]{4}-(0[1-9]|1[0-2])$

ISO 8601 date-time (e.g., 2026-05-11T12:34:56Z).

  • Type: string
  • Constraints: format date-time
  • Type: string
  • Constraints: format uri; ≤ 2048 chars
  • Type: string
  • Constraints: format email; ≤ 254 chars

URL-safe identifier (lowercase alphanumerics and hyphens, must start with alphanumeric).

  • Type: string
  • Constraints: pattern ^[a-z0-9][a-z0-9-]*$; 1–64 chars

Map of BCP-47 locale tag to short title-like string (max 200 chars per value).

  • Type: object (map)
  • Keys: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$
  • Values: string (1–200 chars)
  • Constraints: at least 1 entry

Map of BCP-47 locale tag to body-length string (max 5000 chars per value).

  • Type: object (map)
  • Keys: pattern ^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$
  • Values: string (1–5000 chars)
  • Constraints: at least 1 entry

Identifies the kind of link. ‘custom’ requires iconUrl.

  • Type: string
  • Constraints: one of: website, blog, github, gitlab, linkedin, x, mastodon, bluesky, instagram, youtube, threads, facebook, email, rss, custom
FieldTypeRequiredConstraintsDescription
displayNameLocalizedTitleYes
taglineLocalizedTitleNo
bioLocalizedBodyNo
avatarAvatarNo
locationAddressNo
FieldTypeRequiredConstraintsDescription
urlstringYesformat uri-reference; ≤ 2048 charsURL or path to the avatar image.
altLocalizedTitleNo
FieldTypeRequiredConstraintsDescription
countryIso3166Alpha2No
regionstringNo≤ 100 chars
localityLocalizedTitleNo
displayLocalizedTitleNo
FieldTypeRequiredConstraintsDescription
idSlugYes
typeLinkTypeYes
labelLocalizedTitleNo
urlUrlYes
featuredbooleanNo
orderintegerNo≥ 0
iconUrlUrlNo

If type is custom, then iconUrl must be set. No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
idSlugYes
organizationLocalizedTitleYes
roleLocalizedTitleYes
descriptionLocalizedBodyNo
startDateYearMonthYes
endDateYearMonth or nullNo
isCurrentbooleanNo
urlUrlNo
locationAddressNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
descriptionLocalizedBodyNo
urlUrlNo
tagsarray of stringNo≤ 30 items; items: 1–50 chars
relatedCareerIdSlugNo
startDateYearMonthNo
endDateYearMonth or nullNo
highlightedbooleanNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
labelstringYes1–100 chars
categorystringNo1–64 charsRecommended values (extensible): programming, design, business, communication, language, music, art, sports, other.
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
emailEmailNo
showEmailbooleanNodefault false
formUrlUrlNo
FieldTypeRequiredConstraintsDescription
defaultLocaleLocaleTagYes
fallbackLocaleLocaleTagNo
availableLocalesarray of LocaleTagYes1–50 items; unique items
themestringNo1–64 charsUI theme identifier. ‘default’ is the built-in theme; adapters may add more.
showPoweredBybooleanNodefault trueDisplay the ‘Powered by takuhon’ attribution in the rendered profile.
enableJsonLdbooleanNodefault trueEmit Schema.org JSON-LD on the rendered profile page.
enableApibooleanNodefault trueExpose the public read API endpoints (GET /api/profile, /api/jsonld, /api/schema, /takuhon.json).
enableAnalyticsbooleanNodefault falseOpt-in flag for first-party analytics. Default is false to keep takuhon privacy-respecting by default.
activityActivitySettingsNo
publicVisibilityPublicVisibilityNo

Per-section public visibility (added in 0.6.0). Each key is a content section; setting it to false hides that whole section from every public surface (GET /, /api/profile, /api/jsonld, /takuhon.json, MCP, and the derived CV) via the shared applyPublicPrivacyFilter. An absent key — or an absent object — means the section is public, so the default is all-visible and omitting this block is fully backwards-compatible. The profile identity (profile.displayName, …) is always public and is intentionally not a key here. Field-level controls (contact.showEmail, meta.privacy.*) still apply within a visible section: visibility is the AND of the feature toggle, this section flag, and the field flag.

FieldTypeRequiredConstraintsDescription
linksbooleanNoDefault true. When false, links[] is emitted empty on public surfaces.
careersbooleanNoDefault true. When false, careers[] is emitted empty on public surfaces.
projectsbooleanNoDefault true. When false, projects[] is emitted empty on public surfaces.
skillsbooleanNoDefault true. When false, skills[] is emitted empty on public surfaces.
certificationsbooleanNoDefault true. When false, certifications[] is emitted empty on public surfaces.
membershipsbooleanNoDefault true. When false, memberships[] is emitted empty on public surfaces.
volunteeringbooleanNoDefault true. When false, volunteering[] is emitted empty on public surfaces.
honorsbooleanNoDefault true. When false, honors[] is emitted empty on public surfaces.
educationbooleanNoDefault true. When false, education[] is emitted empty on public surfaces.
publicationsbooleanNoDefault true. When false, publications[] is emitted empty on public surfaces.
languagesbooleanNoDefault true. When false, languages[] is emitted empty on public surfaces.
coursesbooleanNoDefault true. When false, courses[] is emitted empty on public surfaces.
patentsbooleanNoDefault true. When false, patents[] is emitted empty on public surfaces.
testScoresbooleanNoDefault true. When false, testScores[] is emitted empty on public surfaces.
recommendationsbooleanNoDefault true. When false, recommendations[] is emitted empty on public surfaces.
contactbooleanNoDefault true. When false, the contact section (email, formUrl) is emitted empty on public surfaces.

No additional properties beyond those listed.

Opt-in developer-activity dashboard configuration (GitHub / WakaTime). Only the owner-curated settings live here; secrets are provisioned out of band and the synced metrics are stored in a separate document, never in takuhon.json.

FieldTypeRequiredConstraintsDescription
enabledbooleanNodefault falseMaster switch. When false (the default), the activity section is not rendered even if a snapshot exists.
githubobjectNo
wakatimeobjectNo
showRankbooleanNodefault trueDisplay the derived activity rank / badge.
refreshHintHoursintegerNo1–168Advisory refresh cadence in hours. The real cadence is how often the sync step (CLI command or scheduled job) runs.

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
usernamestringYes1–39 charsGitHub login whose public activity is summarized.
showLanguagesbooleanNodefault true
showContributionsbooleanNodefault true

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
usernamestringYes1–255 charsWakaTime username whose coding-time stats are summarized.
showCodingTimebooleanNodefault true

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
createdAtIsoDateTimeNo
updatedAtIsoDateTimeNo
generatorstringNo1–100 charsTool that produced this document (e.g. ‘Takuhon’, ‘create-takuhon@0.1.0’).
contentLicenseContentLicenseYes
privacyMetaPrivacyNo
FieldTypeRequiredConstraintsDescription
spdxIdstringYes1–64 charsSPDX identifier (e.g., ‘CC-BY-4.0’, ‘CC0-1.0’) or ‘Proprietary’. No default; the profile owner must choose explicitly.
urlUrlNo
attributionobjectNo
rightsstringNo1–1000 charsFree-form rights statement (used when spdxId=‘Proprietary’ or for additional notices).

No additional properties beyond those listed.

FieldTypeRequiredConstraintsDescription
namestringNo1–200 chars
urlUrlNo

No additional properties beyond those listed.

Opt-out flags that strip personally identifying fields from public API output (GET /api/profile, /api/jsonld, /takuhon.json). Admin endpoints (PUT /api/admin/*, GET /api/admin/export) ignore these flags. Privacy-by-default: omitting the object or individual flags is equivalent to true.

FieldTypeRequiredConstraintsDescription
hideCredentialIdsbooleanNodefault trueWhen true (default), strip certifications[*].credentialId from public responses.
hideEducationGradesbooleanNodefault trueWhen true (default), strip education[*].grade from public responses.
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
issuingOrganizationLocalizedTitleYes
issueDateYearMonthYes
expirationDateYearMonth or nullNonull = explicitly ‘no expiration’. Omit if unknown/unstated.
credentialIdstringNo1–100 charsLicense or certificate number. Public exposure controlled by meta.privacy.hideCredentialIds.
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
organizationLocalizedTitleYes
roleLocalizedTitleNo
descriptionLocalizedBodyNo
startDateYearMonthYes
endDateYearMonth or nullNonull = ongoing. Omit if unknown.
isCurrentbooleanNo
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
organizationLocalizedTitleYes
roleLocalizedTitleYes
causeLocalizedTitleNo
descriptionLocalizedBodyNo
startDateYearMonthYes
endDateYearMonth or nullNo
isCurrentbooleanNo
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
issuerLocalizedTitleYes
descriptionLocalizedBodyNo
dateYearMonthYes
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
institutionLocalizedTitleYes
degreeLocalizedTitleNo
fieldOfStudyLocalizedTitleNo
descriptionLocalizedBodyNo
gradestringNo1–50 charsFree-form grade / class / GPA. Public exposure controlled by meta.privacy.hideEducationGrades.
startDateYearMonthYes
endDateYearMonth or nullNonull = currently enrolled.
isCurrentbooleanNo
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
publisherLocalizedTitleNo
descriptionLocalizedBodyNo
dateYearMonthYes
urlUrlNo
doistringNo1–200 charsDOI identifier (e.g. ‘10.1145/3548643.3548644’). The full URL goes in ‘url’.
coAuthorsarray of stringNo≤ 50 items; items: 1–100 charsCo-author names in original script. Excludes the profile owner.
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
languageLocaleTagYes
displayNameLocalizedTitleNo
proficiencystringYesone of: native, fluent, professional, intermediate, basicLinkedIn-compatible 5-level proficiency.
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
providerLocalizedTitleNo
courseNumberstringNo1–50 chars
descriptionLocalizedBodyNo
completionDateYearMonthNo
certificateUrlUrlNo
relatedEducationIdSlugNoOptional reference to an education[].id (e.g. for university coursework).
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
patentNumberstringYes1–100 chars
officestringNo≤ 100 charsPatent office name (e.g. ‘USPTO’, ‘JPO’, ‘EPO’).
statusstringYesone of: pending, issued, expired, abandoned
descriptionLocalizedBodyNo
filingDateYearMonthNo
grantDateYearMonthNo
urlUrlNo
coInventorsarray of stringNo≤ 20 items; items: 1–100 chars
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
titleLocalizedTitleYes
scorestringYes1–50 charsFree-form score string (e.g. ‘112 / 120’, ‘330’, ‘N1 Pass’, or a percentile). The validator does not interpret its contents.
dateYearMonthYes
relatedEducationIdSlugNoOptional reference to an education[].id (e.g. for a university course exam).
descriptionLocalizedBodyNo
urlUrlNo
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
idSlugYes
bodyLocalizedBodyYes
authorRecommendationAuthorYes
relationshipLocalizedTitleNoHow the recommender relates to the profile owner (e.g. ‘managed directly’, ‘worked together’).
dateYearMonthNo
relatedCareerIdSlugNoOptional reference to a careers[].id (the position the recommendation pertains to).
relatedEducationIdSlugNoOptional reference to an education[].id (e.g. a recommendation from a professor).
orderintegerNo≥ 0
FieldTypeRequiredConstraintsDescription
namestringYes1–100 charsRecommender’s name, in its original script. Owner-curated; takuhon does not verify it.
headlineLocalizedTitleNoRecommender’s title / role / organization at the time of the recommendation.
urlUrlNoLink to the recommender’s profile, for external verification by the reader.