# groups

name: Guests
permissions: ["read:pages","read:assets","read:comments"]
createdAt: 2026-01-29T08:38:02.872Z
updatedAt: 2026-01-29T08:38:02.872Z
redirectOnLogin: /
pageRules:
  [{"id":"guest","roles":["read:pages","read:assets","read:comments"],"match":"START","deny":false,"path":"","locales":[]}]


# locales

code: en
name: English
nativeName: English
createdAt: 2026-01-29T08:38:02.838Z
updatedAt: 2026-01-29T08:38:09.223Z
strings:
  {"common":{"footer":{"poweredBy":"Powered by","copyright":"© {{year}} {{company}}. All rights reserved.","license":"Content is available under the {{license}}, by {{company}}."},"actions":{"save":"Save","cancel":"Cancel","download":"Download","upload":"Upload","discard":"Discard","clear":"Clear","create":"Create","edit":"Edit","delete":"Delete","refresh":"Refresh","saveChanges":"Save Changes","proceed":"Proceed","ok":"OK","add":"Add","apply":"Apply","browse":"Browse...","close":"Close","page":"Page","discardChanges":"Discard Changes","move":"Move","rename":"Rename","optimize":"Optimize","preview":"Preview","properties":"Properties","insert":"Insert","fetch":"Fetch","generate":"Generate","confirm":"Confirm","copy":"Copy","returnToTop":"Return to top","exit":"Exit","select":"Select","convert":"Convert"},"newpage":{"title":"This page does not exist yet.","subtitle":"Would you like to create it now?","create":"Create Page","goback":"Go back"},"unauthorized":{"title":"Unauthorized","action":{"view":"You cannot view this page.","source":"You cannot view the page source.","history":"You cannot view the page history.","edit":"You cannot edit the page.","create":"You cannot create the page.","download":"You cannot download the page content.","downloadVersion":"You cannot download the content for this page version.","sourceVersion":"You cannot view the source of this version of the page."},"goback":"Go Back","login":"Login As..."},"notfound":{"gohome":"Home","title":"Not Found","subtitle":"This page does not exist."},"welcome":{"title":"Welcome to your wiki!","subtitle":"Let's get started and create the home page.","createhome":"Create Home Page","goadmin":"Administration"},"header":{"home":"Home","newPage":"New Page","currentPage":"Current Page","view":"View","edit":"Edit","history":"History","viewSource":"View Source","move":"Move / Rename","delete":"Delete","assets":"Assets","imagesFiles":"Images & Files","search":"Search...","admin":"Administration","account":"Account","myWiki":"My Wiki","profile":"Profile","logout":"Logout","login":"Login","searchHint":"Type at least 2 characters to start searching...","searchLoading":"Searching...","searchNoResult":"No pages matching your query.","searchResultsCount":"Found {{total}} results","searchDidYouMean":"Did you mean...","searchClose":"Close","searchCopyLink":"Copy Search Link","language":"Language","browseTags":"Browse by Tags","siteMap":"Site Map","pageActions":"Page Actions","duplicate":"Duplicate","convert":"Convert"},"page":{"lastEditedBy":"Last edited by","unpublished":"Unpublished","editPage":"Edit Page","toc":"Page Contents","bookmark":"Bookmark","share":"Share","printFormat":"Print Format","delete":"Delete Page","deleteTitle":"Are you sure you want to delete page {{title}}?","deleteSubtitle":"The page can be restored from the administration area.","viewingSource":"Viewing source of page {{path}}","returnNormalView":"Return to Normal View","id":"ID {{id}}","published":"Published","private":"Private","global":"Global","loading":"Loading Page...","viewingSourceVersion":"Viewing source as of {{date}} of page {{path}}","versionId":"Version ID {{id}}","unpublishedWarning":"This page is not published.","tags":"Tags","tagsMatching":"Pages matching tags","convert":"Convert Page","convertTitle":"Select the editor you want to use going forward for the page {{title}}:","convertSubtitle":"The page content will be converted into the format of the newly selected editor. Note that some formatting or non-rendered content may be lost as a result of the conversion. A snapshot will be added to the page history and can be restored at any time.","editExternal":"Edit on {{name}}"},"error":{"unexpected":"An unexpected error occurred."},"password":{"veryWeak":"Very Weak","weak":"Weak","average":"Average","strong":"Strong","veryStrong":"Very Strong"},"user":{"search":"Search User","searchPlaceholder":"Search Users..."},"duration":{"every":"Every","minutes":"Minute(s)","hours":"Hour(s)","days":"Day(s)","months":"Month(s)","years":"Year(s)"},"outdatedBrowserWarning":"Your browser is outdated. Upgrade to a {{modernBrowser}}.","modernBrowser":"modern browser","license":{"none":"None","ccby":" Creative Commons Attribution License","ccbysa":"Creative Commons Attribution-ShareAlike License","ccbynd":"Creative Commons Attribution-NoDerivs License","ccbync":"Creative Commons Attribution-NonCommercial License","ccbyncsa":"Creative Commons Attribution-NonCommercial-ShareAlike License","ccbyncnd":"Creative Commons Attribution-NonCommercial-NoDerivs License","cc0":"Public Domain","alr":"All Rights Reserved"},"sidebar":{"browse":"Browse","mainMenu":"Main Menu","currentDirectory":"Current Directory","root":"(root)"},"comments":{"title":"Comments","newPlaceholder":"Write a new comment...","fieldName":"Your Name","fieldEmail":"Your Email Address","markdownFormat":"Markdown Format","postComment":"Post Comment","loading":"Loading comments...","postingAs":"Posting as {{name}}","beFirst":"Be the first to comment.","none":"No comments yet.","updateComment":"Update Comment","deleteConfirmTitle":"Confirm Delete","deleteWarn":"Are you sure you want to permanently delete this comment?","deletePermanentWarn":"This action cannot be undone!","modified":"modified {{reldate}}","postSuccess":"New comment posted successfully.","contentMissingError":"Comment is empty or too short!","updateSuccess":"Comment was updated successfully.","deleteSuccess":"Comment was deleted successfully.","viewDiscussion":"View Discussion","newComment":"New Comment","fieldContent":"Comment Content","sdTitle":"Talk"},"pageSelector":{"createTitle":"Select New Page Location","moveTitle":"Move / Rename Page Location","selectTitle":"Select a Page","virtualFolders":"Virtual Folders","pages":"Pages","folderEmptyWarning":"This folder is empty."}},"auth":{"loginRequired":"Login required","fields":{"emailUser":"Email / Username","password":"Password","email":"Email Address","verifyPassword":"Verify Password","name":"Name","username":"Username"},"actions":{"login":"Log In","register":"Register"},"errors":{"invalidLogin":"Invalid Login","invalidLoginMsg":"The email or password is invalid.","invalidUserEmail":"Invalid User Email","loginError":"Login error","notYetAuthorized":"You have not been authorized to login to this site yet.","tooManyAttempts":"Too many attempts!","tooManyAttemptsMsg":"You've made too many failed attempts in a short period of time, please try again {{time}}.","userNotFound":"User not found"},"providers":{"local":"Local","windowslive":"Microsoft Account","azure":"Azure Active Directory","google":"Google ID","facebook":"Facebook","github":"GitHub","slack":"Slack","ldap":"LDAP / Active Directory"},"tfa":{"title":"Two Factor Authentication","subtitle":"Security code required:","placeholder":"XXXXXX","verifyToken":"Verify"},"registerTitle":"Create an account","switchToLogin":{"text":"Already have an account? {{link}}","link":"Login instead"},"loginUsingStrategy":"Login using {{strategy}}","forgotPasswordLink":"Forgot your password?","orLoginUsingStrategy":"or login using...","switchToRegister":{"text":"Don't have an account yet? {{link}}","link":"Create an account"},"invalidEmailUsername":"Enter a valid email / username.","invalidPassword":"Enter a valid password.","loginSuccess":"Login Successful! Redirecting...","signingIn":"Signing In...","genericError":"Authentication is unavailable.","registerSubTitle":"Fill-in the form below to create your account.","pleaseWait":"Please wait","registerSuccess":"Account created successfully!","registering":"Creating account...","missingEmail":"Missing email address.","invalidEmail":"Email address is invalid.","missingPassword":"Missing password.","passwordTooShort":"Password is too short.","passwordNotMatch":"Both passwords do not match.","missingName":"Name is missing.","nameTooShort":"Name is too short.","nameTooLong":"Name is too long.","forgotPasswordCancel":"Cancel","sendResetPassword":"Reset Password","forgotPasswordSubtitle":"Enter your email address to receive the instructions to reset your password:","registerCheckEmail":"Check your emails to activate your account.","changePwd":{"subtitle":"Choose a new password","instructions":"You must choose a new password:","newPasswordPlaceholder":"New Password","newPasswordVerifyPlaceholder":"Verify New Password","proceed":"Change Password","loading":"Changing password..."},"forgotPasswordLoading":"Requesting password reset...","forgotPasswordSuccess":"Check your emails for password reset instructions!","selectAuthProvider":"Select Authentication Provider","enterCredentials":"Enter your credentials","forgotPasswordTitle":"Forgot your password","tfaFormTitle":"Enter the security code generated from your trusted device:","tfaSetupTitle":"Your administrator has required Two-Factor Authentication (2FA) to be enabled on your account.","tfaSetupInstrFirst":"1) Scan the QR code below from your mobile 2FA application:","tfaSetupInstrSecond":"2) Enter the security code generated from your trusted device:"},"admin":{"dashboard":{"title":"Dashboard","subtitle":"Wiki.js","pages":"Pages","users":"Users","groups":"Groups","versionLatest":"You are running the latest version.","versionNew":"A new version is available: {{version}}","contributeSubtitle":"Wiki.js is a free and open source project. There are several ways you can contribute to the project.","contributeHelp":"We need your help!","contributeLearnMore":"Learn More","recentPages":"Recent Pages","mostPopularPages":"Most Popular Pages","lastLogins":"Last Logins"},"general":{"title":"General","subtitle":"Main settings of your wiki","siteInfo":"Site Info","siteBranding":"Site Branding","general":"General","siteUrl":"Site URL","siteUrlHint":"Full URL to your wiki, without the trailing slash. (e.g. https://wiki.example.com)","siteTitle":"Site Title","siteTitleHint":"Displayed in the top bar and appended to all pages meta title.","logo":"Logo","uploadLogo":"Upload Logo","uploadClear":"Clear","uploadSizeHint":"An image of {{size}} pixels is recommended for best results.","uploadTypesHint":"{{typeList}} or {{lastType}} files only","footerCopyright":"Footer Copyright","companyName":"Company / Organization Name","companyNameHint":"Name to use when displaying copyright notice in the footer. Leave empty to hide.","siteDescription":"Site Description","siteDescriptionHint":"Default description when none is provided for a page.","metaRobots":"Meta Robots","metaRobotsHint":"Default: Index, Follow. Can also be set on a per-page basis.","logoUrl":"Logo URL","logoUrlHint":"Specify an image to use as the logo. SVG, PNG, JPG are supported, in a square ratio, 34x34 pixels or larger. Click the button on the right to upload a new image.","contentLicense":"Content License","contentLicenseHint":"License shown in the footer of all content pages.","siteTitleInvalidChars":"Site Title contains invalid characters.","saveSuccess":"Site configuration saved successfully.","pageExtensions":"Page Extensions","pageExtensionsHint":"A comma-separated list of URL extensions that will be treated as pages. For example, adding md will treat /foobar.md the same as /foobar.","editMenuExternalName":"Button Site Name","editMenuExternalNameHint":"The name of the external site to display on the edit button. Do not include the \"Edit on\" prefix.","editMenuExternalIcon":"Button Icon","editMenuExternalIconHint":"The icon to display on the edit button. For example, mdi-github to display the GitHub icon.","editMenuExternalUrl":"Button URL","editMenuExternalUrlHint":"Url to the page on the external repository. Use the {filename} placeholder where the filename should be included. (e.g. https://github.com/foo/bar/blob/main/{filename} )","editShortcuts":"Edit Shortcuts","editFab":"FAB Quick Edit Menu","editFabHint":"Display the edit floating action button (FAB) with a speed-dial menu in the bottom right corner of the screen.","editMenuBar":"Edit Menu Bar","displayEditMenuBar":"Display Edit Menu Bar","displayEditMenuBarHint":"Display the edit menu bar in the page header.","displayEditMenuBtn":"Display Edit Button","displayEditMenuBtnHint":"Display a button to edit the current page.","displayEditMenuExternalBtn":"Display External Edit Button","displayEditMenuExternalBtnHint":"Display a button linking to an external repository (e.g. GitHub) where users can edit or submit a PR for the current page.","footerOverride":"Footer Text Override","footerOverrideHint":"Optionally override the footer text with a custom message. Useful if none of the above licenses are appropriate."},"locale":{"title":"Locale","subtitle":"Set localization options for your wiki","settings":"Locale Settings","namespacing":"Multilingual Namespacing","downloadTitle":"Download Locale","base":{"labelWithNS":"Base Locale","hint":"All UI text elements will be displayed in selected language.","label":"Site Locale"},"autoUpdate":{"label":"Update Automatically","hintWithNS":"Automatically download updates to all namespaced locales enabled below.","hint":"Automatically download updates to this locale as they become available."},"namespaces":{"label":"Multilingual Namespaces","hint":"Enables multiple language versions of the same page."},"activeNamespaces":{"label":"Active Namespaces","hint":"List of locales enabled for multilingual namespacing. The base locale defined above will always be included regardless of this selection."},"namespacingPrefixWarning":{"title":"The locale code will be prefixed to all paths. (e.g. /{{langCode}}/page-name)","subtitle":"Paths without a locale code will be automatically redirected to the base locale defined above."},"sideload":"Sideload Locale Package","sideloadHelp":"If you are not connected to the internet or cannot download locale files using the method above, you can instead sideload packages manually by uploading them below.","code":"Code","name":"Name","nativeName":"Native Name","rtl":"RTL","availability":"Availability","download":"Download"},"stats":{"title":"Statistics"},"theme":{"title":"Theme","subtitle":"Modify the look & feel of your wiki","siteTheme":"Site Theme","siteThemeHint":"Themes affect how content pages are displayed. Other site sections (such as the editor or admin area) are not affected.","darkMode":"Dark Mode","darkModeHint":"Not recommended for accessibility. May not be supported by all themes.","codeInjection":"Code Injection","cssOverride":"CSS Override","cssOverrideHint":"CSS code to inject after system default CSS. Consider using custom themes if you have a large amount of css code. Injecting too much CSS code will result in poor page load performance! CSS will automatically be minified.","headHtmlInjection":"Head HTML Injection","headHtmlInjectionHint":"HTML code to be injected just before the closing head tag. Usually for script tags.","bodyHtmlInjection":"Body HTML Injection","bodyHtmlInjectionHint":"HTML code to be injected just before the closing body tag.","downloadThemes":"Download Themes","iconset":"Icon Set","iconsetHint":"Set of icons to use for the sidebar navigation.","downloadName":"Name","downloadAuthor":"Author","downloadDownload":"Download","cssOverrideWarning":"{{caution}} When adding styles for page content, you must scope them to the {{cssClass}} class. Omitting this could break the layout of the editor!","cssOverrideWarningCaution":"CAUTION:","options":"Theme Options","tocHeadingLevels":"Default TOC Heading Levels","tocHeadingLevelsHint":"The table of contents will show headings from and up to the selected levels by default."},"groups":{"title":"Groups"},"users":{"title":"Users","active":"Active","inactive":"Inactive","verified":"Verified","unverified":"Unverified","edit":"Edit User","id":"ID {{id}}","basicInfo":"Basic Info","email":"Email","displayName":"Display Name","authentication":"Authentication","authProvider":"Provider","password":"Password","changePassword":"Change Password","newPassword":"New Password","tfa":"Two Factor Authentication (2FA)","toggle2FA":"Toggle 2FA","authProviderId":"Provider Id","groups":"User Groups","noGroupAssigned":"This user is not assigned to any group yet. You must assign at least 1 group to a user.","selectGroup":"Select Group...","groupAssign":"Assign","extendedMetadata":"Extended Metadata","location":"Location","jobTitle":"Job Title","timezone":"Timezone","userUpdateSuccess":"User updated successfully.","userAlreadyAssignedToGroup":"User is already assigned to this group!","deleteConfirmTitle":"Delete User?","deleteConfirmText":"Are you sure you want to delete user {{username}}?","updateUser":"Update User","groupAssignNotice":"Note that you cannot assign users to the Administrators or Guests groups from this panel.","deleteConfirmForeignNotice":"Note that you cannot delete a user that already created content. You must instead either deactivate the user or delete all content that was created by that user.","userVerifySuccess":"User has been verified successfully.","userActivateSuccess":"User has been activated successfully.","userDeactivateSuccess":"User deactivated successfully.","deleteConfirmReplaceWarn":"Any content (pages, uploads, comments, etc.) that was created by this user will be reassigned to the user selected below. It is recommended to create a dummy target user (e.g. Deleted User) if you don't want the content to be reassigned to any current active user.","userTFADisableSuccess":"2FA was disabled successfully.","userTFAEnableSuccess":"2FA was enabled successfully."},"auth":{"title":"Authentication","subtitle":"Configure the authentication settings of your wiki","strategies":"Strategies","globalAdvSettings":"Global Advanced Settings","jwtAudience":"JWT Audience","jwtAudienceHint":"Audience URN used in JWT issued upon login. Usually your domain name. (e.g. urn:your.domain.com)","tokenExpiration":"Token Expiration","tokenExpirationHint":"The expiration period of a token until it must be renewed. (default: 30m)","tokenRenewalPeriod":"Token Renewal Period","tokenRenewalPeriodHint":"The maximum period a token can be renewed when expired. (default: 14d)","strategyState":"This strategy is {{state}} {{locked}}","strategyStateActive":"active","strategyStateInactive":"not active","strategyStateLocked":"and cannot be disabled.","strategyConfiguration":"Strategy Configuration","strategyNoConfiguration":"This strategy has no configuration options you can modify.","registration":"Registration","selfRegistration":"Allow self-registration","selfRegistrationHint":"Allow any user successfully authorized by the strategy to access the wiki.","domainsWhitelist":"Limit to specific email domains","domainsWhitelistHint":"A list of domains authorized to register. The user email address domain must match one of these to gain access.","autoEnrollGroups":"Assign to group","autoEnrollGroupsHint":"Automatically assign new users to these groups.","security":"Security","force2fa":"Force all users to use Two-Factor Authentication (2FA)","force2faHint":"Users will be required to setup 2FA the first time they login and cannot be disabled by the user.","configReference":"Configuration Reference","configReferenceSubtitle":"Some strategies may require some configuration values to be set on your provider. These are provided for reference only and may not be needed by the current strategy.","siteUrlNotSetup":"You must set a valid {{siteUrl}} first! Click on {{general}} in the left sidebar.","allowedWebOrigins":"Allowed Web Origins","callbackUrl":"Callback URL / Redirect URI","loginUrl":"Login URL","logoutUrl":"Logout URL","tokenEndpointAuthMethod":"Token Endpoint Authentication Method","refreshSuccess":"List of strategies has been refreshed.","saveSuccess":"Authentication configuration saved successfully.","activeStrategies":"Active Strategies","addStrategy":"Add Strategy","strategyIsEnabled":"Active","strategyIsEnabledHint":"Are users able to login using this strategy?","displayName":"Display Name","displayNameHint":"The title shown to the end user for this authentication strategy."},"editor":{"title":"Editor"},"logging":{"title":"Logging"},"rendering":{"title":"Rendering","subtitle":"Configure the page rendering pipeline"},"search":{"title":"Search Engine","subtitle":"Configure the search capabilities of your wiki","rebuildIndex":"Rebuild Index","searchEngine":"Search Engine","engineConfig":"Engine Configuration","engineNoConfig":"This engine has no configuration options you can modify.","listRefreshSuccess":"List of search engines has been refreshed.","configSaveSuccess":"Search engine configuration saved successfully.","indexRebuildSuccess":"Index rebuilt successfully."},"storage":{"title":"Storage","subtitle":"Set backup and sync targets for your content","targets":"Targets","status":"Status","lastSync":"Last synchronization {{time}}","lastSyncAttempt":"Last attempt was {{time}}","errorMsg":"Error Message","noTarget":"You don't have any active storage target.","targetConfig":"Target Configuration","noConfigOption":"This storage target has no configuration options you can modify.","syncDirection":"Sync Direction","syncDirectionSubtitle":"Choose how content synchronization is handled for this storage target.","syncDirBi":"Bi-directional","syncDirPush":"Push to target","syncDirPull":"Pull from target","unsupported":"Unsupported","syncDirBiHint":"In bi-directional mode, content is first pulled from the storage target. Any newer content overwrites local content. New content since last sync is then pushed to the storage target, overwriting any content on target if present.","syncDirPushHint":"Content is always pushed to the storage target, overwriting any existing content. This is safest choice for backup scenarios.","syncDirPullHint":"Content is always pulled from the storage target, overwriting any local content which already exists. This choice is usually reserved for single-use content import. Caution with this option as any local content will always be overwritten!","syncSchedule":"Sync Schedule","syncScheduleHint":"For performance reasons, this storage target synchronize changes on an interval-based schedule, instead of on every change. Define at which interval should the synchronization occur.","syncScheduleCurrent":"Currently set to every {{schedule}}.","syncScheduleDefault":"The default is every {{schedule}}.","actions":"Actions","actionRun":"Run","targetState":"This storage target is {{state}}","targetStateActive":"active","targetStateInactive":"inactive","actionsInactiveWarn":"You must enable this storage target and apply changes before you can run actions."},"api":{"title":"API Access","subtitle":"Manage keys to access the API","enabled":"API Enabled","disabled":"API Disabled","enableButton":"Enable API","disableButton":"Disable API","newKeyButton":"New API Key","headerName":"Name","headerKeyEnding":"Key Ending","headerExpiration":"Expiration","headerCreated":"Created","headerLastUpdated":"Last Updated","headerRevoke":"Revoke","noKeyInfo":"No API keys have been generated yet.","revokeConfirm":"Revoke API Key?","revokeConfirmText":"Are you sure you want to revoke key {{name}}? This action cannot be undone!","revoke":"Revoke","refreshSuccess":"List of API keys has been refreshed.","revokeSuccess":"The key has been revoked successfully.","newKeyTitle":"New API Key","newKeySuccess":"API key created successfully.","newKeyNameError":"Name is missing or invalid.","newKeyGroupError":"You must select a group.","newKeyGuestGroupError":"The guests group cannot be used for API keys.","newKeyNameHint":"Purpose of this key","newKeyName":"Name","newKeyExpiration":"Expiration","newKeyExpirationHint":"You can still revoke a key anytime regardless of the expiration.","newKeyPermissionScopes":"Permission Scopes","newKeyFullAccess":"Full Access","newKeyGroupPermissions":"or use group permissions...","newKeyGroup":"Group","newKeyGroupHint":"The API key will have the same permissions as the selected group.","expiration30d":"30 days","expiration90d":"90 days","expiration180d":"180 days","expiration1y":"1 year","expiration3y":"3 years","newKeyCopyWarn":"Copy the key shown below as {{bold}}","newKeyCopyWarnBold":"it will NOT be shown again","toggleStateEnabledSuccess":"API has been enabled successfully.","toggleStateDisabledSuccess":"API has been disabled successfully."},"system":{"title":"System Info","subtitle":"Information about your system","hostInfo":"Host Information","currentVersion":"Current Version","latestVersion":"Latest Version","published":"Published","os":"Operating System","hostname":"Hostname","cpuCores":"CPU Cores","totalRAM":"Total RAM","workingDirectory":"Working Directory","configFile":"Configuration File","ramUsage":"RAM Usage: {{used}} / {{total}}","dbPartialSupport":"Your database version is not fully supported. Some functionality may be limited or not work as expected.","refreshSuccess":"System Info has been refreshed."},"utilities":{"title":"Utilities","subtitle":"Maintenance and miscellaneous tools","tools":"Tools","authTitle":"Authentication","authSubtitle":"Various tools for authentication / users","cacheTitle":"Flush Cache","cacheSubtitle":"Flush cache of various components","graphEndpointTitle":"GraphQL Endpoint","graphEndpointSubtitle":"Change the GraphQL endpoint for Wiki.js","importv1Title":"Import from Wiki.js 1.x","importv1Subtitle":"Migrate data from a previous 1.x installation","telemetryTitle":"Telemetry","telemetrySubtitle":"Enable/Disable telemetry or reset the client ID","contentTitle":"Content","contentSubtitle":"Various tools for pages","exportTitle":"Export to Disk","exportSubtitle":"Save content to tarball for backup / migration"},"dev":{"title":"Developer Tools","flags":{"title":"Flags"},"graphiql":{"title":"GraphiQL"},"voyager":{"title":"Voyager"}},"contribute":{"title":"Contribute to Wiki.js","subtitle":"Help support Wiki.js development and operations","fundOurWork":"Fund our work","spreadTheWord":"Spread the word","talkToFriends":"Talk to your friends and colleagues about how awesome Wiki.js is!","followUsOnTwitter":"Follow us on {{0}}.","submitAnIdea":"Submit an idea or vote on a proposed one on the {{0}}.","submitAnIdeaLink":"feature requests board","foundABug":"Found a bug? Submit an issue on {{0}}.","helpTranslate":"Help translate Wiki.js in your language. Let us know on {{0}}.","makeADonation":"Make a donation","contribute":"Contribute","openCollective":"Wiki.js is also part of the Open Collective initiative, a transparent fund that goes toward community resources. You can contribute financially by making a monthly or one-time donation:","needYourHelp":"We need your help to keep improving the software and run the various associated services (e.g. hosting and networking).","openSource":"Wiki.js is a free and open-source software brought to you with {{0}} by {{1}} and {{2}}.","openSourceContributors":"contributors","tshirts":"You can also buy Wiki.js t-shirts to support the project financially:","shop":"Wiki.js Shop","becomeAPatron":"Become a Patron","patreon":"Become a backer or sponsor via Patreon (goes directly into supporting lead developer Nicolas Giard's goal of working full-time on Wiki.js)","paypal":"Make a one-time or recurring donation via Paypal:","ethereum":"We accept donations using Ethereum:","github":"Become a sponsor via GitHub Sponsors (goes directly into supporting lead developer Nicolas Giard's goal of working full-time on Wiki.js)","becomeASponsor":"Become a Sponsor"},"nav":{"site":"Site","users":"Users","modules":"Modules","system":"System"},"pages":{"title":"Pages"},"navigation":{"title":"Navigation","subtitle":"Manage the site navigation","link":"Link","divider":"Divider","header":"Header","label":"Label","icon":"Icon","targetType":"Target Type","target":"Target","noSelectionText":"Select a navigation item on the left.","untitled":"Untitled {{kind}}","navType":{"external":"External Link","home":"Home","page":"Page","searchQuery":"Search Query","externalblank":"External Link (New Window)"},"edit":"Edit {{kind}}","delete":"Delete {{kind}}","saveSuccess":"Navigation saved successfully.","noItemsText":"Click the Add button to add your first navigation item.","emptyList":"Navigation is empty","visibilityMode":{"all":"Visible to everyone","restricted":"Visible to select groups..."},"selectPageButton":"Select Page...","mode":"Navigation Mode","modeSiteTree":{"title":"Site Tree","description":"Classic Tree-based Navigation"},"modeCustom":{"title":"Custom Navigation","description":"Static Navigation Menu + Site Tree Button"},"modeNone":{"title":"None","description":"Disable Site Navigation"},"copyFromLocale":"Copy from locale...","sourceLocale":"Source Locale","sourceLocaleHint":"The locale from which navigation items will be copied from.","copyFromLocaleInfoText":"Select the locale from which items will be copied from. Items will be appended to the current list of items in the active locale.","modeStatic":{"title":"Static Navigation","description":"Static Navigation Menu Only"}},"mail":{"title":"Mail","subtitle":"Configure mail settings","configuration":"Configuration","dkim":"DKIM (optional)","test":"Send a test email","testRecipient":"Recipient Email Address","testSend":"Send Email","sender":"Sender","senderName":"Sender Name","senderEmail":"Sender Email","smtp":"SMTP Settings","smtpHost":"Host","smtpPort":"Port","smtpPortHint":"Usually 465 (recommended), 587 or 25.","smtpTLS":"Secure (TLS)","smtpTLSHint":"Should be enabled when using port 465, otherwise turned off (587 or 25).","smtpUser":"Username","smtpPwd":"Password","dkimHint":"DKIM (DomainKeys Identified Mail) provides a layer of security on all emails sent from Wiki.js by providing the means for recipients to validate the domain name and ensure the message authenticity.","dkimUse":"Use DKIM","dkimDomainName":"Domain Name","dkimKeySelector":"Key Selector","dkimPrivateKey":"Private Key","dkimPrivateKeyHint":"Private key for the selector in PEM format","testHint":"Send a test email to ensure your SMTP configuration is working.","saveSuccess":"Configuration saved successfully.","sendTestSuccess":"A test email was sent successfully.","smtpVerifySSL":"Verify SSL Certificate","smtpVerifySSLHint":"Some hosts requires SSL certificate checking to be disabled. Leave enabled for proper security.","smtpName":"Client Identifying Hostname","smtpNameHint":"An optional name to send to the SMTP server to identify your mailer. Leave empty to use server hostname. For Google Workspace customers, this should be your main domain name."},"webhooks":{"title":"Webhooks","subtitle":"Manage webhooks to external services"},"adminArea":"Administration Area","analytics":{"title":"Analytics","subtitle":"Add analytics and tracking tools to your wiki","providers":"Providers","providerConfiguration":"Provider Configuration","providerNoConfiguration":"This provider has no configuration options you can modify.","refreshSuccess":"List of providers refreshed successfully.","saveSuccess":"Analytics configuration saved successfully"},"comments":{"title":"Comments","provider":"Provider","subtitle":"Add discussions to your wiki pages","providerConfig":"Provider Configuration","providerNoConfig":"This provider has no configuration options you can modify.","configSaveSuccess":"Comments configuration saved successfully."},"tags":{"title":"Tags","subtitle":"Manage page tags","emptyList":"No tags to display.","edit":"Edit Tag","tag":"Tag","label":"Label","date":"Created {{created}} and last updated {{updated}}.","delete":"Delete this tag","noSelectionText":"Select a tag from the list on the left.","noItemsText":"Add a tag to a page to get started.","refreshSuccess":"Tags have been refreshed.","deleteSuccess":"Tag deleted successfully.","saveSuccess":"Tag has been saved successfully.","filter":"Filter...","viewLinkedPages":"View Linked Pages","deleteConfirm":"Delete Tag?","deleteConfirmText":"Are you sure you want to delete tag {{tag}}? The tag will also be unlinked from all pages."},"ssl":{"title":"SSL","subtitle":"Manage SSL configuration","provider":"Provider","providerHint":"Select Custom Certificate if you have your own certificate already.","domain":"Domain","domainHint":"Enter the fully qualified domain pointing to your wiki. (e.g. wiki.example.com)","providerOptions":"Provider Options","providerDisabled":"Disabled","providerLetsEncrypt":"Let's Encrypt","providerCustomCertificate":"Custom Certificate","ports":"Ports","httpPort":"HTTP Port","httpPortHint":"Non-SSL port the server will listen to for HTTP requests. Usually 80 or 3000.","httpsPort":"HTTPS Port","httpsPortHint":"SSL port the server will listen to for HTTPS requests. Usually 443.","httpPortRedirect":"Redirect HTTP requests to HTTPS","httpPortRedirectHint":"Will automatically redirect any requests on the HTTP port to HTTPS.","writableConfigFileWarning":"Note that your config file must be writable in order to persist ports configuration.","renewCertificate":"Renew Certificate","status":"Certificate Status","expiration":"Certificate Expiration","subscriberEmail":"Subscriber Email","currentState":"Current State","httpPortRedirectTurnOn":"Turn On","httpPortRedirectTurnOff":"Turn Off","renewCertificateLoadingTitle":"Renewing Certificate...","renewCertificateLoadingSubtitle":"Do not leave this page.","renewCertificateSuccess":"Certificate renewed successfully.","httpPortRedirectSaveSuccess":"HTTP Redirection changed successfully."},"security":{"title":"Security","maxUploadSize":"Max Upload Size","maxUploadBatch":"Max Files per Upload","maxUploadBatchHint":"How many files can be uploaded in a single batch?","maxUploadSizeHint":"The maximum size for a single file.","maxUploadSizeSuffix":"bytes","maxUploadBatchSuffix":"files","uploads":"Uploads","uploadsInfo":"These settings only affect Wiki.js. If you're using a reverse-proxy (e.g. nginx, apache, Cloudflare), you must also change its settings to match.","subtitle":"Configure security settings","login":"Login","loginScreen":"Login Screen","jwt":"JWT Configuration","bypassLogin":"Bypass Login Screen","bypassLoginHint":"Should the user be redirected automatically to the first authentication provider.","loginBgUrl":"Login Background Image URL","loginBgUrlHint":"Specify an image to use as the login background. PNG and JPG are supported, 1920x1080 recommended. Leave empty for default. Click the button on the right to upload a new image. Note that the Guests group must have read-access to the selected image!","hideLocalLogin":"Hide Local Authentication Provider","hideLocalLoginHint":"Don't show the local authentication provider on the login screen. Add ?all to the URL to temporarily use it.","loginSecurity":"Security","enforce2fa":"Enforce 2FA","enforce2faHint":"Force all users to use Two-Factor Authentication when using an authentication provider with a user / password form."},"extensions":{"title":"Extensions","subtitle":"Install extensions for extra functionality"}},"editor":{"page":"Page","save":{"processing":"Rendering","pleaseWait":"Please wait...","createSuccess":"Page created successfully.","error":"An error occurred while creating the page","updateSuccess":"Page updated successfully.","saved":"Saved"},"props":{"pageProperties":"Page Properties","pageInfo":"Page Info","title":"Title","shortDescription":"Short Description","shortDescriptionHint":"Shown below the title","pathCategorization":"Path & Categorization","locale":"Locale","path":"Path","pathHint":"Do not include any leading or trailing slashes.","tags":"Tags","tagsHint":"Use tags to categorize your pages and make them easier to find.","publishState":"Publishing State","publishToggle":"Published","publishToggleHint":"Unpublished pages are still visible to users with write permissions on this page.","publishStart":"Publish starting on...","publishStartHint":"Leave empty for no start date","publishEnd":"Publish ending on...","publishEndHint":"Leave empty for no end date","info":"Info","scheduling":"Scheduling","social":"Social","categorization":"Categorization","socialFeatures":"Social Features","allowComments":"Allow Comments","allowCommentsHint":"Enable commenting abilities on this page.","allowRatings":"Allow Ratings","displayAuthor":"Display Author Info","displaySharingBar":"Display Sharing Toolbar","displaySharingBarHint":"Show a toolbar with buttons to share and print this page","displayAuthorHint":"Show the page author along with the last edition time.","allowRatingsHint":"Enable rating capabilities on this page.","scripts":"Scripts","css":"CSS","cssHint":"CSS will automatically be minified upon saving. Do not include surrounding style tags, only the actual CSS code.","styles":"Styles","html":"HTML","htmlHint":"You must surround your javascript code with HTML script tags.","toc":"TOC","tocTitle":"Table of Contents","tocUseDefault":"Use Site Defaults","tocHeadingLevels":"TOC Heading Levels","tocHeadingLevelsHint":"The table of contents will show headings from and up to the selected levels."},"unsaved":{"title":"Discard Unsaved Changes?","body":"You have unsaved changes. Are you sure you want to leave the editor and discard any modifications you made since the last save?"},"select":{"title":"Which editor do you want to use for this page?","cannotChange":"This cannot be changed once the page is created.","customView":"or create a custom view?"},"assets":{"title":"Assets","newFolder":"New Folder","folderName":"Folder Name","folderNameNamingRules":"Must follow the asset folder {{namingRules}}.","folderNameNamingRulesLink":"naming rules","folderEmpty":"This asset folder is empty.","fileCount":"{{count}} files","headerId":"ID","headerFilename":"Filename","headerType":"Type","headerFileSize":"File Size","headerAdded":"Added","headerActions":"Actions","uploadAssets":"Upload Assets","uploadAssetsDropZone":"Browse or Drop files here...","fetchImage":"Fetch Remote Image","imageAlign":"Image Alignment","renameAsset":"Rename Asset","renameAssetSubtitle":"Enter the new name for this asset:","deleteAsset":"Delete Asset","deleteAssetConfirm":"Are you sure you want to delete asset","deleteAssetWarn":"This action cannot be undone!","refreshSuccess":"List of assets refreshed successfully.","uploadFailed":"File upload failed.","folderCreateSuccess":"Asset folder created successfully.","renameSuccess":"Asset renamed successfully.","deleteSuccess":"Asset deleted successfully.","noUploadError":"You must choose a file to upload first!"},"backToEditor":"Back to Editor","markup":{"bold":"Bold","italic":"Italic","strikethrough":"Strikethrough","heading":"Heading {{level}}","subscript":"Subscript","superscript":"Superscript","blockquote":"Blockquote","blockquoteInfo":"Info Blockquote","blockquoteSuccess":"Success Blockquote","blockquoteWarning":"Warning Blockquote","blockquoteError":"Error Blockquote","unorderedList":"Unordered List","orderedList":"Ordered List","inlineCode":"Inline Code","keyboardKey":"Keyboard Key","horizontalBar":"Horizontal Bar","togglePreviewPane":"Hide / Show Preview Pane","insertLink":"Insert Link","insertAssets":"Insert Assets","insertBlock":"Insert Block","insertCodeBlock":"Insert Code Block","insertVideoAudio":"Insert Video / Audio","insertDiagram":"Insert Diagram","insertMathExpression":"Insert Math Expression","tableHelper":"Table Helper","distractionFreeMode":"Distraction Free Mode","markdownFormattingHelp":"Markdown Formatting Help","noSelectionError":"Text must be selected first!","toggleSpellcheck":"Toggle Spellcheck"},"ckeditor":{"stats":"{{chars}} chars, {{words}} words"},"conflict":{"title":"Resolve Save Conflict","useLocal":"Use Local","useRemote":"Use Remote","useRemoteHint":"Discard local changes and use latest version","useLocalHint":"Use content in the left panel","viewLatestVersion":"View Latest Version","infoGeneric":"A more recent version of this page was saved by {{authorName}}, {{date}}","whatToDo":"What do you want to do?","whatToDoLocal":"Use your current local version and ignore the latest changes.","whatToDoRemote":"Use the remote version (latest) and discard your changes.","overwrite":{"title":"Overwrite with Remote Version?","description":"Are you sure you want to replace your current version with the latest remote content? {{refEditsLost}}","editsLost":"Your current edits will be lost."},"localVersion":"Local Version {{refEditable}}","editable":"(editable)","readonly":"(read-only)","remoteVersion":"Remote Version {{refReadOnly}}","leftPanelInfo":"Your current edit, based on page version from {{date}}","rightPanelInfo":"Last edited by {{authorName}}, {{date}}","pageTitle":"Title:","pageDescription":"Description:","warning":"Save conflict! Another user has already modified this page."},"unsavedWarning":"You have unsaved edits. Are you sure you want to leave the editor?"},"tags":{"currentSelection":"Current Selection","clearSelection":"Clear Selection","selectOneMoreTags":"Select one or more tags","searchWithinResultsPlaceholder":"Search within results...","locale":"Locale","orderBy":"Order By","selectOneMoreTagsHint":"Select one or more tags on the left.","retrievingResultsLoading":"Retrieving page results...","noResults":"Couldn't find any page with the selected tags.","noResultsWithFilter":"Couldn't find any page matching the current filtering options.","pageLastUpdated":"Last Updated {{date}}","orderByField":{"creationDate":"Creation Date","ID":"ID","lastModified":"Last Modified","path":"Path","title":"Title"},"localeAny":"Any"},"history":{"restore":{"confirmTitle":"Restore page version?","confirmText":"Are you sure you want to restore this page content as it was on {{date}}? This version will be copied on top of the current history. As such, newer versions will still be preserved.","confirmButton":"Restore","success":"Page version restored succesfully!"}},"profile":{"displayName":"Display Name","location":"Location","jobTitle":"Job Title","timezone":"Timezone","title":"Profile","subtitle":"My personal info","myInfo":"My Info","viewPublicProfile":"View Public Profile","auth":{"title":"Authentication","provider":"Provider","changePassword":"Change Password","currentPassword":"Current Password","newPassword":"New Password","verifyPassword":"Confirm New Password","changePassSuccess":"Password changed successfully."},"groups":{"title":"Groups"},"activity":{"title":"Activity","joinedOn":"Joined on","lastUpdatedOn":"Profile last updated on","lastLoginOn":"Last login on","pagesCreated":"Pages created","commentsPosted":"Comments posted"},"save":{"success":"Profile saved successfully."},"pages":{"title":"Pages","subtitle":"List of pages I created or last modified","emptyList":"No pages to display.","refreshSuccess":"Page list has been refreshed.","headerTitle":"Title","headerPath":"Path","headerCreatedAt":"Created","headerUpdatedAt":"Last Updated"},"comments":{"title":"Comments"},"preferences":"Preferences","dateFormat":"Date Format","localeDefault":"Locale Default","appearance":"Appearance","appearanceDefault":"Site Default","appearanceLight":"Light","appearanceDark":"Dark"}}


# navigation

key: site
config:
  [{"locale":"en","items":[{"id":"923e6997-9389-4ad4-80b2-b79bdd860c59","icon":"mdi-home","kind":"link","label":"Home","target":"/","targetType":"home","visibilityMode":"all","visibilityGroups":null}]}]


# pageHistory

path: getting-started
hash: ba0bb11d5164ba98d9ff2c028eccaf1b9bfdd8d1
title: Getting Started
description: Getting started guide for Bridge Things
contentType: markdown
createdAt: 2026-01-29T09:31:02.439Z
action: updated
editorKey: markdown
localeCode: en
versionDate: 2026-01-29T09:23:05.539Z
extra: {}
content:
  # Getting Started

  Welcome to Bridge Things! This guide will help you get oriented.

  ## Who We Are

  Bridge Things is an embedded systems startup building IoT solutions. We specialize in:

  - **Embedded Firmware** - Custom firmware for microcontrollers
  - **Hardware Design** - PCB design and prototyping
  - **IoT Solutions** - Connected devices and cloud integration
  - **Protocol Implementation** - Modbus, MQTT, and more

  ## Our Tools

  We have built several useful tools available at [system.bridgethings.com](https://system.bridgethings.com):

  | Tool | Description |
  |------|-------------|
  | [Hex Converter](https://system.bridgethings.com/hexconverter/) | Convert between hex, integers, floats with endian support |
  | [Data Converter](https://system.bridgethings.com/dataconverter/) | Text, binary, hex, base64, and hash conversions |
  | [Modbus Master](https://system.bridgethings.com/modbusmaster/) | Test Modbus TCP connections |
  | [Modbus Slave](https://system.bridgethings.com/modbusslave/) | Simulate Modbus devices |
  | [Battery Calculator](https://system.bridgethings.com/batterycalculator/) | Calculate battery requirements |

  ## Navigation Tips

  - Use the **search bar** (top) to find content quickly
  - Click the **hamburger menu** (☰) to browse all pages
  - Press `Ctrl+K` for quick search

  ## Need Help?

  Contact the team or check the relevant documentation section.


# pages

path: home
hash: b29b5d2ce62e55412776ab98f05631e0aa96597b
title: Welcome
description: Welcome to the Bridge Things knowledge base
contentType: markdown
createdAt: 2026-01-29T09:22:47.657Z
updatedAt: 2026-01-29T12:58:51.397Z
editorKey: markdown
localeCode: en
extra: {"js":"","css":""}
content:
  # Welcome to Bridge Things Wiki

  Your central knowledge base for all things Bridge Things.

  ## Quick Links

  - [Getting Started](/getting-started) - New here? Start here!
  - [Products](/products) - Our product documentation
  - [Tools](/tools) - Useful utilities and calculators
  - [API Reference](/api) - Developer documentation

  ## About Bridge Things

  Bridge Things is an embedded systems and IoT startup focused on building innovative hardware and software solutions.

  ## Recent Updates

  *This wiki is just getting started. More content coming soon!*

  ---

  > **Tip:** Use the search bar above to find specific topics, or browse the navigation menu.

render:
  <h1 id="welcome-to-bridge-things-wiki" class="toc-header"><a class="toc-anchor" href="#welcome-to-bridge-things-wiki">¶</a> Welcome to Bridge Things Wiki</h1>
  <p>Your central knowledge base for all things Bridge Things.</p>
  <h2 id="quick-links" class="toc-header"><a class="toc-anchor" href="#quick-links">¶</a> Quick Links</h2>
  <ul>
  <li><a href="/getting-started" class="is-internal-link is-invalid-page">Getting Started</a> - New here? Start here!</li>
  <li><a href="/products" class="is-internal-link is-invalid-page">Products</a> - Our product documentation</li>
  <li><a href="/tools" class="is-internal-link is-invalid-page">Tools</a> - Useful utilities and calculators</li>
  <li><a href="/api" class="is-internal-link is-invalid-page">API Reference</a> - Developer documentation</li>
  </ul>
  <h2 id="about-bridge-things" class="toc-header"><a class="toc-anchor" href="#about-bridge-things">¶</a> About Bridge Things</h2>
  <p>Bridge Things is an embedded systems and IoT startup focused on building innovative hardware and software solutions.</p>
  <h2 id="recent-updates" class="toc-header"><a class="toc-anchor" href="#recent-updates">¶</a> Recent Updates</h2>
  <p><em>This wiki is just getting started. More content coming soon!</em></p>
  <hr>
  <blockquote>
  <p><strong>Tip:</strong> Use the search bar above to find specific topics, or browse the navigation menu.</p>
  </blockquote>

toc:
  [{"title":"Welcome to Bridge Things Wiki","anchor":"#welcome-to-bridge-things-wiki","children":[{"title":"Quick Links","anchor":"#quick-links","children":[]},{"title":"About Bridge Things","anchor":"#about-bridge-things","children":[]},{"title":"Recent Updates","anchor":"#recent-updates","children":[]}]}]


path: getting-started
hash: ba0bb11d5164ba98d9ff2c028eccaf1b9bfdd8d1
title: Getting Started
description: Getting started guide for Bridge Things
contentType: markdown
createdAt: 2026-01-29T09:23:04.113Z
updatedAt: 2026-01-29T09:31:03.907Z
editorKey: markdown
localeCode: en
extra: {"js":"","css":""}
content:
  # Getting Started

  Welcome to BridgeThings! This guide will help you get oriented.

  ## Who We Are

  BridgeThings is an embedded systems startup building IoT solutions. We specialize in industrial IoT:

  - **Embedded Firmware** - Custom firmware for microcontrollers
  - **Hardware Design** - PCB design and prototyping
  - **IoT Solutions** - Connected devices and cloud integration
  - **Protocol Implementation** - Modbus, MQTT, and more

  ## Our Tools

  We have built several useful tools available at [system.bridgethings.com](https://system.bridgethings.com):

  | Tool | Description |
  |------|-------------|
  | [Hex Converter](https://system.bridgethings.com/hexconverter/) | Convert between hex, integers, floats with endian support |
  | [Data Converter](https://system.bridgethings.com/dataconverter/) | Text, binary, hex, base64, and hash conversions |
  | [Modbus Master](https://system.bridgethings.com/modbusmaster/) | Test Modbus TCP connections |
  | [Modbus Slave](https://system.bridgethings.com/modbusslave/) | Simulate Modbus devices |
  | [Battery Calculator](https://system.bridgethings.com/batterycalculator/) | Calculate battery requirements |

  ## Navigation Tips

  - Use the **search bar** (top) to find content quickly
  - Click the **hamburger menu** (☰) to browse all pages
  - Press `Ctrl+K` for quick search

  ## Need Help?

  Contact the team or check the relevant documentation section.

render:
  <h1 id="getting-started" class="toc-header"><a class="toc-anchor" href="#getting-started">¶</a> Getting Started</h1>
  <p>Welcome to BridgeThings! This guide will help you get oriented.</p>
  <h2 id="who-we-are" class="toc-header"><a class="toc-anchor" href="#who-we-are">¶</a> Who We Are</h2>
  <p>BridgeThings is an embedded systems startup building IoT solutions. We specialize in industrial IoT:</p>
  <ul>
  <li><strong>Embedded Firmware</strong> - Custom firmware for microcontrollers</li>
  <li><strong>Hardware Design</strong> - PCB design and prototyping</li>
  <li><strong>IoT Solutions</strong> - Connected devices and cloud integration</li>
  <li><strong>Protocol Implementation</strong> - Modbus, MQTT, and more</li>
  </ul>
  <h2 id="our-tools" class="toc-header"><a class="toc-anchor" href="#our-tools">¶</a> Our Tools</h2>
  <p>We have built several useful tools available at <a href="https://system.bridgethings.com" class="is-external-link">system.bridgethings.com</a>:</p>
  <div class="table-container"><table>
  <thead>
  <tr>
  <th>Tool</th>
  <th>Description</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td><a href="https://system.bridgethings.com/hexconverter/" class="is-external-link">Hex Converter</a></td>
  <td>Convert between hex, integers, floats with endian support</td>
  </tr>
  <tr>
  <td><a href="https://system.bridgethings.com/dataconverter/" class="is-external-link">Data Converter</a></td>
  <td>Text, binary, hex, base64, and hash conversions</td>
  </tr>
  <tr>
  <td><a href="https://system.bridgethings.com/modbusmaster/" class="is-external-link">Modbus Master</a></td>
  <td>Test Modbus TCP connections</td>
  </tr>
  <tr>
  <td><a href="https://system.bridgethings.com/modbusslave/" class="is-external-link">Modbus Slave</a></td>
  <td>Simulate Modbus devices</td>
  </tr>
  <tr>
  <td><a href="https://system.bridgethings.com/batterycalculator/" class="is-external-link">Battery Calculator</a></td>
  <td>Calculate battery requirements</td>
  </tr>
  </tbody>
  </table></div>
  <h2 id="navigation-tips" class="toc-header"><a class="toc-anchor" href="#navigation-tips">¶</a> Navigation Tips</h2>
  <ul>
  <li>Use the <strong>search bar</strong> (top) to find content quickly</li>
  <li>Click the <strong>hamburger menu</strong> (☰) to browse all pages</li>
  <li>Press <code>Ctrl+K</code> for quick search</li>
  </ul>
  <h2 id="need-help" class="toc-header"><a class="toc-anchor" href="#need-help">¶</a> Need Help?</h2>
  <p>Contact the team or check the relevant documentation section.</p>

toc:
  [{"title":"Getting Started","anchor":"#getting-started","children":[{"title":"Who We Are","anchor":"#who-we-are","children":[]},{"title":"Our Tools","anchor":"#our-tools","children":[]},{"title":"Navigation Tips","anchor":"#navigation-tips","children":[]},{"title":"Need Help?","anchor":"#need-help","children":[]}]}]


path: products
hash: 1ec1947084a0727e583e0389e1f109b5dfc3fd24
title: Products
description: Bridge Things product documentation
contentType: markdown
createdAt: 2026-01-29T12:57:42.415Z
updatedAt: 2026-01-29T12:57:43.832Z
editorKey: markdown
localeCode: en
extra: {"js":"","css":""}
content:
  # Products

  Bridge Things product documentation and specifications.

  ## Product Categories

  ### IoT Devices
  *Coming soon* - Documentation for our connected devices.

  ### Development Boards
  *Coming soon* - Custom development boards and kits.

  ### Modules
  *Coming soon* - Communication and sensor modules.

  ---

  ## Documentation Template

  Each product page will include:

  - **Overview** - What it does
  - **Specifications** - Technical details
  - **Pinout** - Connection diagrams
  - **Getting Started** - Quick start guide
  - **API/Protocol** - Communication details
  - **Examples** - Code samples
  - **Troubleshooting** - Common issues

  ---

  > 📝 *This section is under development. Product documentation will be added as products are released.*

render:
  <h1 id="products" class="toc-header"><a class="toc-anchor" href="#products">¶</a> Products</h1>
  <p>Bridge Things product documentation and specifications.</p>
  <h2 id="product-categories" class="toc-header"><a class="toc-anchor" href="#product-categories">¶</a> Product Categories</h2>
  <h3 id="iot-devices" class="toc-header"><a class="toc-anchor" href="#iot-devices">¶</a> IoT Devices</h3>
  <p><em>Coming soon</em> - Documentation for our connected devices.</p>
  <h3 id="development-boards" class="toc-header"><a class="toc-anchor" href="#development-boards">¶</a> Development Boards</h3>
  <p><em>Coming soon</em> - Custom development boards and kits.</p>
  <h3 id="modules" class="toc-header"><a class="toc-anchor" href="#modules">¶</a> Modules</h3>
  <p><em>Coming soon</em> - Communication and sensor modules.</p>
  <hr>
  <h2 id="documentation-template" class="toc-header"><a class="toc-anchor" href="#documentation-template">¶</a> Documentation Template</h2>
  <p>Each product page will include:</p>
  <ul>
  <li><strong>Overview</strong> - What it does</li>
  <li><strong>Specifications</strong> - Technical details</li>
  <li><strong>Pinout</strong> - Connection diagrams</li>
  <li><strong>Getting Started</strong> - Quick start guide</li>
  <li><strong>API/Protocol</strong> - Communication details</li>
  <li><strong>Examples</strong> - Code samples</li>
  <li><strong>Troubleshooting</strong> - Common issues</li>
  </ul>
  <hr>
  <blockquote>
  <p>📝 <em>This section is under development. Product documentation will be added as products are released.</em></p>
  </blockquote>

toc:
  [{"title":"Products","anchor":"#products","children":[{"title":"Product Categories","anchor":"#product-categories","children":[{"title":"IoT Devices","anchor":"#iot-devices","children":[]},{"title":"Development Boards","anchor":"#development-boards","children":[]},{"title":"Modules","anchor":"#modules","children":[]}]},{"title":"Documentation Template","anchor":"#documentation-template","children":[]}]}]


path: tools
hash: fe48250a4afdf54267713deec5f3aa8d065d8568
title: Online Tools
description: Free online tools for embedded developers
contentType: markdown
createdAt: 2026-01-29T12:57:44.715Z
updatedAt: 2026-01-29T12:57:46.140Z
editorKey: markdown
localeCode: en
extra: {"js":"","css":""}
content:
  # Online Tools

  Free utilities for embedded developers, available at **system.bridgethings.com**.

  ---

  ## 🔢 Hex Converter
  **[Open Tool](https://system.bridgethings.com/hexconverter/)**

  Convert between hexadecimal and various data types:
  - Int8, Int16, Int32, Int64 (signed/unsigned)
  - Float32, Float64 (IEEE 754)
  - Binary representation
  - ASCII/UTF-8 strings

  **Features:**
  - Big Endian, Little Endian, Mid-Big, Mid-Little support
  - Visual byte representation
  - Reverse converter (Decimal → Hex)
  - Perfect for Modbus and SCADA work

  ---

  ## 🔄 Data Converter
  **[Open Tool](https://system.bridgethings.com/dataconverter/)**

  Convert between multiple data formats:
  - Plain Text ↔ Binary
  - Hexadecimal ↔ Decimal
  - Base64 encoding/decoding
  - URL encoding

  **Checksums & Hashes:**
  - CRC32, Adler-32
  - MD5, SHA-1, SHA-256, SHA-512

  ---

  ## 📡 Modbus Master
  **[Open Tool](https://system.bridgethings.com/modbusmaster/)**

  Test Modbus TCP connections:
  - Read Holding/Input Registers
  - Read Coils/Discrete Inputs
  - Write Single/Multiple Registers
  - Write Single/Multiple Coils

  ---

  ## 🖥️ Modbus Slave Simulator
  **[Open Tool](https://system.bridgethings.com/modbusslave/)**

  Simulate Modbus TCP devices for testing:
  - Configurable register values
  - Support for all function codes
  - Connection logging

  ---

  ## 🔋 Battery Calculator
  **[Open Tool](https://system.bridgethings.com/batterycalculator/)**

  Calculate battery requirements for your projects:
  - Capacity planning
  - Runtime estimation
  - Solar charging calculations

  ---

  ## 🧮 Calculator
  **[Open Tool](https://system.bridgethings.com/calculator/)**

  General purpose scientific calculator.

render:
  <h1 id="online-tools" class="toc-header"><a class="toc-anchor" href="#online-tools">¶</a> Online Tools</h1>
  <p>Free utilities for embedded developers, available at <strong><a href="http://system.bridgethings.com" class="is-external-link">system.bridgethings.com</a></strong>.</p>
  <hr>
  <h2 id="hex-converter" class="toc-header"><a class="toc-anchor" href="#hex-converter">¶</a> 🔢 Hex Converter</h2>
  <p><strong><a href="https://system.bridgethings.com/hexconverter/" class="is-external-link">Open Tool</a></strong></p>
  <p>Convert between hexadecimal and various data types:</p>
  <ul>
  <li>Int8, Int16, Int32, Int64 (signed/unsigned)</li>
  <li>Float32, Float64 (IEEE 754)</li>
  <li>Binary representation</li>
  <li>ASCII/UTF-8 strings</li>
  </ul>
  <p><strong>Features:</strong></p>
  <ul>
  <li>Big Endian, Little Endian, Mid-Big, Mid-Little support</li>
  <li>Visual byte representation</li>
  <li>Reverse converter (Decimal → Hex)</li>
  <li>Perfect for Modbus and SCADA work</li>
  </ul>
  <hr>
  <h2 id="data-converter" class="toc-header"><a class="toc-anchor" href="#data-converter">¶</a> 🔄 Data Converter</h2>
  <p><strong><a href="https://system.bridgethings.com/dataconverter/" class="is-external-link">Open Tool</a></strong></p>
  <p>Convert between multiple data formats:</p>
  <ul>
  <li>Plain Text ↔ Binary</li>
  <li>Hexadecimal ↔ Decimal</li>
  <li>Base64 encoding/decoding</li>
  <li>URL encoding</li>
  </ul>
  <p><strong>Checksums &amp; Hashes:</strong></p>
  <ul>
  <li>CRC32, Adler-32</li>
  <li>MD5, SHA-1, SHA-256, SHA-512</li>
  </ul>
  <hr>
  <h2 id="modbus-master" class="toc-header"><a class="toc-anchor" href="#modbus-master">¶</a> 📡 Modbus Master</h2>
  <p><strong><a href="https://system.bridgethings.com/modbusmaster/" class="is-external-link">Open Tool</a></strong></p>
  <p>Test Modbus TCP connections:</p>
  <ul>
  <li>Read Holding/Input Registers</li>
  <li>Read Coils/Discrete Inputs</li>
  <li>Write Single/Multiple Registers</li>
  <li>Write Single/Multiple Coils</li>
  </ul>
  <hr>
  <h2 id="️-modbus-slave-simulator" class="toc-header"><a class="toc-anchor" href="#️-modbus-slave-simulator">¶</a> 🖥️ Modbus Slave Simulator</h2>
  <p><strong><a href="https://system.bridgethings.com/modbusslave/" class="is-external-link">Open Tool</a></strong></p>
  <p>Simulate Modbus TCP devices for testing:</p>
  <ul>
  <li>Configurable register values</li>
  <li>Support for all function codes</li>
  <li>Connection logging</li>
  </ul>
  <hr>
  <h2 id="battery-calculator" class="toc-header"><a class="toc-anchor" href="#battery-calculator">¶</a> 🔋 Battery Calculator</h2>
  <p><strong><a href="https://system.bridgethings.com/batterycalculator/" class="is-external-link">Open Tool</a></strong></p>
  <p>Calculate battery requirements for your projects:</p>
  <ul>
  <li>Capacity planning</li>
  <li>Runtime estimation</li>
  <li>Solar charging calculations</li>
  </ul>
  <hr>
  <h2 id="calculator" class="toc-header"><a class="toc-anchor" href="#calculator">¶</a> 🧮 Calculator</h2>
  <p><strong><a href="https://system.bridgethings.com/calculator/" class="is-external-link">Open Tool</a></strong></p>
  <p>General purpose scientific calculator.</p>

toc:
  [{"title":"Online Tools","anchor":"#online-tools","children":[{"title":"🔢 Hex Converter","anchor":"#hex-converter","children":[]},{"title":"🔄 Data Converter","anchor":"#data-converter","children":[]},{"title":"📡 Modbus Master","anchor":"#modbus-master","children":[]},{"title":"🖥️ Modbus Slave Simulator","anchor":"#️-modbus-slave-simulator","children":[]},{"title":"🔋 Battery Calculator","anchor":"#battery-calculator","children":[]},{"title":"🧮 Calculator","anchor":"#calculator","children":[]}]}]


path: api
hash: 9e7a73478c60b31ee1903892f396953757ba61a9
title: API Reference
description: API and protocol documentation
contentType: markdown
createdAt: 2026-01-29T12:58:49.366Z
updatedAt: 2026-01-29T12:58:50.779Z
editorKey: markdown
localeCode: en
extra: {"js":"","css":""}
content:
  # API Reference

  Developer documentation for Bridge Things APIs and protocols.

  ## Modbus Protocol

  ### Function Codes

  | Code | Name | Description |
  |------|------|-------------|
  | 0x01 | Read Coils | Read contiguous coils |
  | 0x02 | Read Discrete Inputs | Read contiguous inputs |
  | 0x03 | Read Holding Registers | Read holding registers |
  | 0x04 | Read Input Registers | Read input registers |
  | 0x05 | Write Single Coil | Write one coil |
  | 0x06 | Write Single Register | Write one register |
  | 0x0F | Write Multiple Coils | Write multiple coils |
  | 0x10 | Write Multiple Registers | Write multiple registers |

  ## Coming Soon

  - MQTT Protocol
  - REST APIs

  > Use our [Hex Converter](/tools) to debug protocol data.

render:
  <h1 id="api-reference" class="toc-header"><a class="toc-anchor" href="#api-reference">¶</a> API Reference</h1>
  <p>Developer documentation for Bridge Things APIs and protocols.</p>
  <h2 id="modbus-protocol" class="toc-header"><a class="toc-anchor" href="#modbus-protocol">¶</a> Modbus Protocol</h2>
  <h3 id="function-codes" class="toc-header"><a class="toc-anchor" href="#function-codes">¶</a> Function Codes</h3>
  <div class="table-container"><table>
  <thead>
  <tr>
  <th>Code</th>
  <th>Name</th>
  <th>Description</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td>0x01</td>
  <td>Read Coils</td>
  <td>Read contiguous coils</td>
  </tr>
  <tr>
  <td>0x02</td>
  <td>Read Discrete Inputs</td>
  <td>Read contiguous inputs</td>
  </tr>
  <tr>
  <td>0x03</td>
  <td>Read Holding Registers</td>
  <td>Read holding registers</td>
  </tr>
  <tr>
  <td>0x04</td>
  <td>Read Input Registers</td>
  <td>Read input registers</td>
  </tr>
  <tr>
  <td>0x05</td>
  <td>Write Single Coil</td>
  <td>Write one coil</td>
  </tr>
  <tr>
  <td>0x06</td>
  <td>Write Single Register</td>
  <td>Write one register</td>
  </tr>
  <tr>
  <td>0x0F</td>
  <td>Write Multiple Coils</td>
  <td>Write multiple coils</td>
  </tr>
  <tr>
  <td>0x10</td>
  <td>Write Multiple Registers</td>
  <td>Write multiple registers</td>
  </tr>
  </tbody>
  </table></div>
  <h2 id="coming-soon" class="toc-header"><a class="toc-anchor" href="#coming-soon">¶</a> Coming Soon</h2>
  <ul>
  <li>MQTT Protocol</li>
  <li>REST APIs</li>
  </ul>
  <blockquote>
  <p>Use our <a href="/tools" class="is-internal-link is-valid-page">Hex Converter</a> to debug protocol data.</p>
  </blockquote>

toc:
  [{"title":"API Reference","anchor":"#api-reference","children":[{"title":"Modbus Protocol","anchor":"#modbus-protocol","children":[{"title":"Function Codes","anchor":"#function-codes","children":[]}]},{"title":"Coming Soon","anchor":"#coming-soon","children":[]}]}]


# renderers

key: markdownCore
config:
  {"allowHTML":true,"linkify":true,"linebreaks":true,"underline":false,"typographer":false,"quotes":"English"}


key: markdownPlantuml
config:
  {"server":"https://plantuml.requarks.io","openMarker":"```plantuml","closeMarker":"```","imageFormat":"svg"}


# searchEngines

key: aws
config:
  {"domain":"","endpoint":"","region":"us-east-1","accessKeyId":"","secretAccessKey":"","AnalysisSchemeLang":"en"}


key: elasticsearch
config:
  {"apiVersion":"7.x","hosts":"","verifyTLSCertificate":true,"tlsCertPath":"","indexName":"wiki","analyzer":"simple","sniffOnStart":false,"sniffInterval":0}


# settings

key: certs
updatedAt: 2026-01-29T08:38:02.544Z
value:
  {"jwk":{"kty":"RSA","n":"556A3wKOA0zFa2HDdPe3EPjsJXAXTP5k8xuuEgeJf1GgIyrgm9d-QdusQ6MF38vzf14VZm_vns1mrVJDsGlZBEBYtu4XJ1Cy7YyL1yFHAVadpBX-cmQHQF12YziiswjZJLL2_5ZCU1pxtcHisfIe75ubyccUR2IHZzElYqNJBvVf9pnDCifzyWEOsjpAVYWd5S2j_1vwz8_il0PtO7ggU4GIRn3ct_ARK4b1kfS7rMWPGgfine7VSK8FOb5Nu0M8FiFKzXQeZYYpqxY1-z345RW2hP6MXdVp2gOIfw4KOHLu-5FMJ3g8yI_pndACiH3Jhxl8ICuB4HOAI55jZYVx0Q","e":"AQAB"},"public":"-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEA556A3wKOA0zFa2HDdPe3EPjsJXAXTP5k8xuuEgeJf1GgIyrgm9d+\nQdusQ6MF38vzf14VZm/vns1mrVJDsGlZBEBYtu4XJ1Cy7YyL1yFHAVadpBX+cmQH\nQF12YziiswjZJLL2/5ZCU1pxtcHisfIe75ubyccUR2IHZzElYqNJBvVf9pnDCifz\nyWEOsjpAVYWd5S2j/1vwz8/il0PtO7ggU4GIRn3ct/ARK4b1kfS7rMWPGgfine7V\nSK8FOb5Nu0M8FiFKzXQeZYYpqxY1+z345RW2hP6MXdVp2gOIfw4KOHLu+5FMJ3g8\nyI/pndACiH3Jhxl8ICuB4HOAI55jZYVx0QIDAQAB\n-----END RSA PUBLIC KEY-----\n","private":"-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-256-CBC,73EA97B104C1E0E302C859416B8B85BC\n\nFN98oVF/ZK5Ls8gGmVBT17UXgWfGlHMsckx97vPC9fmprLH5xWXkp1XC2rBdQFhY\nMgYdoIaEUmGFwoguBunfnhgt6W7puOasGcpLOcnfktZ5DUZ6UkABL4mS7BBae7vK\nZbKba7sAbLxcIc4VKYB6bnVB3vSkEGmCk4ZZYC/dsm6F7tiADe2ZwVPEdSLuOHzD\nMbLftu2EqqQ0sLewwpbPXZnVNseh4rUjv4CwvQ28wJM1cC3HYBJpFMlYlXEWEUpQ\nVYL7mPlvV0hK9OJjp6J8sHsKZeugnrOIbpOP4VyDXZ2GrAOZ3oOgv84ejyZoPAFz\nG+yGEJEZ+hQ4wtnsWeBW7aWDRj6bKWaQsuHaxlLuw4bfneY05bQS59uCLXLR9cAS\nWe1d+coUPFA61ujySaRTlcY/xdSac6/fl5khGEW7+QtXAxrGyLSy16M4ZRjsRKVS\nIG/LtxzMk3OyZQTBlSkxPib7iKRq+jZh9w6TBpKBRLDkmRnnA5BN5um5sYgh1iPX\nqGI96hGOx/ifbSHxic+NGD7b/ySOe+pPzZXeZDXG4Jt0aVxH3B9V7cW/NcfCqzwe\nStojXn2RMyYsMRx4Qr385RyBKlJSK/YhvPfOunLanZbmoRvkPnCz52JnfuBC32V4\ntgHX0Kp2tBPLmg4bY8LVsaxhSw1pPgRFsmPM9Oe7zFjefE0TdMuDHX7HCpz9P/kr\nA2twKGDGBQEl+RzyS965HADODsShKSVYyrWaDTuXmUS1eNL2xZ3wi3E64IRve12Q\nvT9o2WLMTrZ55DK6vW5rKd2KA6r6maiPSXsnoRZIZLJJpwgYW0fqW/kWVvr9mV6H\nZ2Ihm/kAVIiSfMR/o0/X/s4IOy9eQvPzNXjyPcSy3xnkWSQFHPzVdR3CopMq3kXP\nFwDvTHPOFUEzvHaLKStiEGQTt1ntphWwBd7Rz3/CV6UiCBq5giaIL9bPmNmuwQVK\nqMGyEHBe/ErY7McEGMo2iA0UgtSwVJGY5xyLPh7XXsZF6huo7c2hJJduab+9U7I8\nlsxlzQiorLZuPFBK6QZLs3K1BtmyKhF7Jt82SjeRSjCPJ2DZPEeJjgPdAHN8oqqX\nRN41vKo7y1CV+1RvNA70iCgeayKiuOs5rmZyKeYPKbPKhBAdVGU1OowQ/aWoko3z\nsqTOElLSNFZ+rmJObUltRmkG8jjzdpy8Qb7B4hV7obGkq3h0yMqb0l1hQibAegTw\nO97dc2sFflzEI9h6hv/LJN17vot0F01x06DgJg/juPtAqEa9V4iGJfQcG/ppRKsg\ndyIe1uNPK1JKqdaKDl0tbJVhai2RqyW56itBtmMRH8OjVYUnsH+RTq25pm/ETFBX\nCtAcqdncusNzi8ikBgW1zzJxjj/k2jZzyrlmtlZA2fzsLWH6rZNYku5dDM+Oowcc\nCW8dxMw2F6DDbQuJJ7QIv5vNOVdULqyujCdKAV0N0FJfRK7wNsql+IkOwx58nFNa\n+asoSaJh78Luv8vjazMeaILwaZ8hze5Xne7Dq2n3O52wqkRGQl1tX656w81QZqU1\nUmT4uq+XE6a49QpLYMgsZMbIljmbSK7Axd5Z754T9YlLQNFsHm8yX7FKmMhO74WQ\n-----END RSA PRIVATE KEY-----\n"}


key: mail
updatedAt: 2026-01-29T08:38:02.668Z
value:
  {"senderName":"","senderEmail":"","host":"","port":465,"name":"","secure":true,"verifySSL":true,"user":"","pass":"","useDKIM":false,"dkimDomainName":"","dkimKeySelector":"","dkimPrivateKey":""}


key: theming
updatedAt: 2026-01-29T09:23:07.317Z
value:
  {"theme":"default","darkMode":false,"iconset":"mdi","injectCSS":"","injectHead":"","injectBody":"","tocPosition":"left"}


key: editShortcuts
updatedAt: 2026-01-29T09:09:32.786Z
value:
  {"editFab":true,"editMenuBar":false,"editMenuBtn":true,"editMenuExternalBtn":true,"editMenuExternalName":"GitHub","editMenuExternalIcon":"mdi-github","editMenuExternalUrl":"https://github.com/org/repo/blob/main/{filename}"}


key: security
updatedAt: 2026-01-29T09:09:32.820Z
value:
  {"securityOpenRedirect":true,"securityIframe":true,"securityReferrerPolicy":true,"securityTrustProxy":false,"securitySRI":true,"securityHSTS":false,"securityHSTSDuration":300,"securityCSP":false,"securityCSPDirectives":""}


# storage

key: git
mode: sync
syncInterval: PT5M
state: {"status":"pending","message":"","lastAttempt":null}
config:
  {"authType":"ssh","repoUrl":"","branch":"master","sshPrivateKeyMode":"path","sshPrivateKeyPath":"","sshPrivateKeyContent":"","verifySSL":true,"basicUsername":"","basicPassword":"","defaultEmail":"name@company.com","defaultName":"John Smith","localRepoPath":"./data/repo","alwaysNamespace":false,"gitBinaryPath":""}


key: s3generic
mode: push
syncInterval: P0D
state: {"status":"pending","message":"","lastAttempt":null}
config:
  {"endpoint":"https://service.region.example.com","bucket":"","accessKeyId":"","secretAccessKey":"","sslEnabled":true,"s3ForcePathStyle":false,"s3BucketEndpoint":false}


key: sftp
mode: push
syncInterval: P0D
state: {"status":"pending","message":"","lastAttempt":null}
config:
  {"host":"","port":22,"authMode":"privateKey","username":"","privateKey":"","passphrase":"","password":"","basePath":"/root/wiki"}


# apiKeys

name: Bridge
expiration: 2029-01-29T03:21:49.000Z
createdAt: 2026-01-29T09:21:49.005Z
updatedAt: 2026-01-29T09:21:49.026Z
key:
  eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGkiOjEsImdycCI6MSwiaWF0IjoxNzY5Njc4NTA5LCJleHAiOjE4NjQzNTEzMDksImF1ZCI6InVybjp3aWtpLmpzIiwiaXNzIjoidXJuOndpa2kuanMifQ.CDGr16mZqM_MYrKRYBqo7rEgHlBgZuHVGYPPFiCKWmqdcgjTt6mrhJFqS_M1ylasby3fsRvib2rWUKEhXSetxuTENrPlJ_kyP3ifKKAkJcVElis34wNb5yeXdJsu3SN4RNXcn7e0q4DS-9PXoHrdeSToVnvUs3gtomxDTxk48PWtnFsKcbsXaEw4AOf7Cyo0eXyLYJD7LhOzkRDZ6UyPmqnlVvg8c4-gazgRFkDBUTjFFRqoAxFadsG9uUQgojfJPkaMvT_yLBhITD21-nlaCMBRSWm-UwAPoxSppVwn5EpesvG9CSpx8LY9rB9NKcpHHHiJ_NEpLhTS8ZDiJ8qYZg


